group_theory.submonoid.operationsMathlib.GroupTheory.Submonoid.Operations

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)

(last sync)

feat(group_theory/subgroup/basic): Map a subgroup under an iso (#17775)

Cross-reference mul_equiv.subgroup_map and subgroup.equiv_map_of_injective. Add lemmas connecting them.

Diff
@@ -605,8 +605,10 @@ def top_equiv : (⊤ : submonoid M) ≃* M :=
   (top_equiv : _ ≃* M).to_monoid_hom = (⊤ : submonoid M).subtype :=
 rfl
 
-/-- A submonoid is isomorphic to its image under an injective function -/
-@[to_additive "An additive submonoid is isomorphic to its image under an injective function"]
+/-- A subgroup is isomorphic to its image under an injective function. If you have an isomorphism,
+use `mul_equiv.submonoid_map` for better definitional equalities. -/
+@[to_additive  "An additive subgroup is isomorphic to its image under an injective function. If you
+have an isomorphism, use `add_equiv.add_submonoid_map` for better definitional equalities."]
 noncomputable def equiv_map_of_injective
   (f : M →* N) (hf : function.injective f) : S ≃* S.map f :=
 { map_mul' := λ _ _, subtype.ext (f.map_mul _ _), ..equiv.set.image f S hf }
@@ -1055,15 +1057,25 @@ a submonoid `S ≤ M` and the submonoid `φ(S) ≤ N`.
 See `monoid_hom.submonoid_map` for a variant for `monoid_hom`s. -/
 @[to_additive "An `add_equiv` `φ` between two additive monoids `M` and `N` induces an `add_equiv`
 between a submonoid `S ≤ M` and the submonoid `φ(S) ≤ N`. See `add_monoid_hom.add_submonoid_map`
-for a variant for `add_monoid_hom`s.", simps]
+for a variant for `add_monoid_hom`s."]
 def submonoid_map (e : M ≃* N) (S : submonoid M) : S ≃* S.map e.to_monoid_hom :=
-{ to_fun := λ x, ⟨e x, _⟩,
-  inv_fun := λ x, ⟨e.symm x, _⟩, -- we restate this for `simps` to avoid `⇑e.symm.to_equiv x`
-  ..e.to_monoid_hom.submonoid_map S,
-  ..e.to_equiv.image S }
+{ map_mul' := λ _ _, subtype.ext (map_mul e _ _), ..(e : M ≃ N).image S }
+
+@[simp, to_additive]
+lemma coe_submonoid_map_apply (e : M ≃* N) (S : submonoid M) (g : S) :
+  ((submonoid_map e S g : S.map (e : M →* N)) : N) = e g := rfl
+
+@[simp, to_additive add_equiv.add_submonoid_map_symm_apply]
+lemma submonoid_map_symm_apply (e : M ≃* N) (S : submonoid M) (g : S.map (e : M →* N)) :
+  (e.submonoid_map S).symm g = ⟨e.symm g, set_like.mem_coe.1 $ set.mem_image_equiv.1 g.2⟩ := rfl
 
 end mul_equiv
 
+@[simp, to_additive]
+lemma submonoid.equiv_map_of_injective_coe_mul_equiv (e : M ≃* N) :
+  S.equiv_map_of_injective (e : M →* N) (equiv_like.injective e) = e.submonoid_map S :=
+by { ext, refl }
+
 section actions
 /-! ### Actions by `submonoid`s
 

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(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
@@ -1665,7 +1665,7 @@ theorem nontrivial_iff_exists_ne_one (S : Submonoid M) : Nontrivial S ↔ ∃ x
 /-- A submonoid is either the trivial submonoid or nontrivial. -/
 @[to_additive "An additive submonoid is either the trivial additive submonoid or nontrivial."]
 theorem bot_or_nontrivial (S : Submonoid M) : S = ⊥ ∨ Nontrivial S := by
-  simp only [eq_bot_iff_forall, nontrivial_iff_exists_ne_one, ← not_forall, Classical.em]
+  simp only [eq_bot_iff_forall, nontrivial_iff_exists_ne_one, ← Classical.not_forall, Classical.em]
 #align submonoid.bot_or_nontrivial Submonoid.bot_or_nontrivial
 #align add_submonoid.bot_or_nontrivial AddSubmonoid.bot_or_nontrivial
 -/
Diff
@@ -4,10 +4,10 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johannes Hölzl, Kenny Lau, Johan Commelin, Mario Carneiro, Kevin Buzzard,
 Amelia Livingston, Yury Kudryashov
 -/
-import Mathbin.Algebra.Order.Monoid.Cancel.Basic
-import Mathbin.GroupTheory.GroupAction.Defs
-import Mathbin.GroupTheory.Submonoid.Basic
-import Mathbin.GroupTheory.Subsemigroup.Operations
+import Algebra.Order.Monoid.Cancel.Basic
+import GroupTheory.GroupAction.Defs
+import GroupTheory.Submonoid.Basic
+import GroupTheory.Subsemigroup.Operations
 
 #align_import group_theory.submonoid.operations from "leanprover-community/mathlib"@"cf8e77c636317b059a8ce20807a29cf3772a0640"
 
Diff
@@ -85,11 +85,11 @@ def Submonoid.toAddSubmonoid : Submonoid M ≃o AddSubmonoid (Additive M)
   toFun S :=
     { carrier := Additive.toMul ⁻¹' S
       zero_mem' := S.one_mem'
-      add_mem' := fun _ _ => S.mul_mem' }
+      add_mem' := fun _ _ => S.hMul_mem' }
   invFun S :=
     { carrier := Additive.ofMul ⁻¹' S
       one_mem' := S.zero_mem'
-      mul_mem' := fun _ _ => S.add_mem' }
+      hMul_mem' := fun _ _ => S.add_mem' }
   left_inv x := by cases x <;> rfl
   right_inv x := by cases x <;> rfl
   map_rel_iff' a b := Iff.rfl
@@ -137,11 +137,11 @@ def AddSubmonoid.toSubmonoid : AddSubmonoid A ≃o Submonoid (Multiplicative A)
   toFun S :=
     { carrier := Multiplicative.toAdd ⁻¹' S
       one_mem' := S.zero_mem'
-      mul_mem' := fun _ _ => S.add_mem' }
+      hMul_mem' := fun _ _ => S.add_mem' }
   invFun S :=
     { carrier := Multiplicative.ofAdd ⁻¹' S
       zero_mem' := S.one_mem'
-      add_mem' := fun _ _ => S.mul_mem' }
+      add_mem' := fun _ _ => S.hMul_mem' }
   left_inv x := by cases x <;> rfl
   right_inv x := by cases x <;> rfl
   map_rel_iff' a b := Iff.rfl
@@ -196,7 +196,7 @@ def comap (f : F) (S : Submonoid N) : Submonoid M
     where
   carrier := f ⁻¹' S
   one_mem' := show f 1 ∈ S by rw [map_one] <;> exact S.one_mem
-  mul_mem' a b ha hb := show f (a * b) ∈ S by rw [map_mul] <;> exact S.mul_mem ha hb
+  hMul_mem' a b ha hb := show f (a * b) ∈ S by rw [map_mul] <;> exact S.mul_mem ha hb
 #align submonoid.comap Submonoid.comap
 #align add_submonoid.comap AddSubmonoid.comap
 -/
@@ -242,7 +242,7 @@ def map (f : F) (S : Submonoid M) : Submonoid N
     where
   carrier := f '' S
   one_mem' := ⟨1, S.one_mem, map_one f⟩
-  mul_mem' := by rintro _ _ ⟨x, hx, rfl⟩ ⟨y, hy, rfl⟩;
+  hMul_mem' := by rintro _ _ ⟨x, hx, rfl⟩ ⟨y, hy, rfl⟩;
     exact ⟨x * y, S.mul_mem hx hy, by rw [map_mul] <;> rfl⟩
 #align submonoid.map Submonoid.map
 #align add_submonoid.map AddSubmonoid.map
@@ -804,7 +804,7 @@ namespace Submonoid
 /-- A submonoid of a monoid inherits a multiplication. -/
 @[to_additive "An `add_submonoid` of an `add_monoid` inherits an addition."]
 instance mul : Mul S :=
-  ⟨fun a b => ⟨a.1 * b.1, S.mul_mem a.2 b.2⟩⟩
+  ⟨fun a b => ⟨a.1 * b.1, S.hMul_mem a.2 b.2⟩⟩
 #align submonoid.has_mul Submonoid.mul
 #align add_submonoid.has_add AddSubmonoid.add
 -/
@@ -837,7 +837,7 @@ theorem coe_one : ((1 : S) : M) = 1 :=
 #print Submonoid.mk_mul_mk /-
 @[simp, to_additive]
 theorem mk_mul_mk (x y : M) (hx : x ∈ S) (hy : y ∈ S) :
-    (⟨x, hx⟩ : S) * ⟨y, hy⟩ = ⟨x * y, S.mul_mem hx hy⟩ :=
+    (⟨x, hx⟩ : S) * ⟨y, hy⟩ = ⟨x * y, S.hMul_mem hx hy⟩ :=
   rfl
 #align submonoid.mk_mul_mk Submonoid.mk_mul_mk
 #align add_submonoid.mk_add_mk AddSubmonoid.mk_add_mk
@@ -845,7 +845,7 @@ theorem mk_mul_mk (x y : M) (hx : x ∈ S) (hy : y ∈ S) :
 
 #print Submonoid.mul_def /-
 @[to_additive]
-theorem mul_def (x y : S) : x * y = ⟨x * y, S.mul_mem x.2 y.2⟩ :=
+theorem mul_def (x y : S) : x * y = ⟨x * y, S.hMul_mem x.2 y.2⟩ :=
   rfl
 #align submonoid.mul_def Submonoid.mul_def
 #align add_submonoid.add_def AddSubmonoid.add_def
@@ -993,7 +993,7 @@ use `mul_equiv.submonoid_map` for better definitional equalities. -/
 @[to_additive
       "An additive subgroup is isomorphic to its image under an injective function. If you\nhave an isomorphism, use `add_equiv.add_submonoid_map` for better definitional equalities."]
 noncomputable def equivMapOfInjective (f : M →* N) (hf : Function.Injective f) : S ≃* S.map f :=
-  { Equiv.Set.image f S hf with map_mul' := fun _ _ => Subtype.ext (f.map_mul _ _) }
+  { Equiv.Set.image f S hf with map_mul' := fun _ _ => Subtype.ext (f.map_hMul _ _) }
 #align submonoid.equiv_map_of_injective Submonoid.equivMapOfInjective
 #align add_submonoid.equiv_map_of_injective AddSubmonoid.equivMapOfInjective
 -/
@@ -1031,7 +1031,7 @@ def prod (s : Submonoid M) (t : Submonoid N) : Submonoid (M × N)
     where
   carrier := s ×ˢ t
   one_mem' := ⟨s.one_mem, t.one_mem⟩
-  mul_mem' p q hp hq := ⟨s.mul_mem hp.1 hq.1, t.mul_mem hp.2 hq.2⟩
+  hMul_mem' p q hp hq := ⟨s.hMul_mem hp.1 hq.1, t.hMul_mem hp.2 hq.2⟩
 #align submonoid.prod Submonoid.prod
 #align add_submonoid.prod AddSubmonoid.prod
 -/
@@ -1133,7 +1133,7 @@ theorem prod_bot_sup_bot_prod (s : Submonoid M) (t : Submonoid N) :
     s.Prod ⊥ ⊔ prod ⊥ t = s.Prod t :=
   le_antisymm (sup_le (prod_mono (le_refl s) bot_le) (prod_mono bot_le (le_refl t))) fun p hp =>
     Prod.fst_mul_snd p ▸
-      mul_mem ((le_sup_left : s.Prod ⊥ ≤ s.Prod ⊥ ⊔ prod ⊥ t) ⟨hp.1, Set.mem_singleton 1⟩)
+      hMul_mem ((le_sup_left : s.Prod ⊥ ≤ s.Prod ⊥ ⊔ prod ⊥ t) ⟨hp.1, Set.mem_singleton 1⟩)
         ((le_sup_right : prod ⊥ t ≤ s.Prod ⊥ ⊔ prod ⊥ t) ⟨Set.mem_singleton 1, hp.2⟩)
 #align submonoid.prod_bot_sup_bot_prod Submonoid.prod_bot_sup_bot_prod
 #align add_submonoid.prod_bot_sup_bot_prod AddSubmonoid.prod_bot_sup_bot_prod
@@ -1364,7 +1364,7 @@ def codRestrict {S} [SetLike S N] [SubmonoidClass S N] (f : M →* N) (s : S) (h
     M →* s where
   toFun n := ⟨f n, h n⟩
   map_one' := Subtype.eq f.map_one
-  map_mul' x y := Subtype.eq (f.map_mul x y)
+  map_mul' x y := Subtype.eq (f.map_hMul x y)
 #align monoid_hom.cod_restrict MonoidHom.codRestrict
 #align add_monoid_hom.cod_restrict AddMonoidHom.codRestrict
 -/
@@ -1512,7 +1512,7 @@ def submonoidComap (f : M →* N) (N' : Submonoid N) : N'.comap f →* N'
     where
   toFun x := ⟨f x, x.Prop⟩
   map_one' := Subtype.eq f.map_one
-  map_mul' x y := Subtype.eq (f.map_mul x y)
+  map_mul' x y := Subtype.eq (f.map_hMul x y)
 #align monoid_hom.submonoid_comap MonoidHom.submonoidComap
 #align add_monoid_hom.add_submonoid_comap AddMonoidHom.addSubmonoidComap
 -/
@@ -1527,7 +1527,7 @@ def submonoidMap (f : M →* N) (M' : Submonoid M) : M' →* M'.map f
     where
   toFun x := ⟨f x, ⟨x, x.Prop, rfl⟩⟩
   map_one' := Subtype.eq <| f.map_one
-  map_mul' x y := Subtype.eq <| f.map_mul x y
+  map_mul' x y := Subtype.eq <| f.map_hMul x y
 #align monoid_hom.submonoid_map MonoidHom.submonoidMap
 #align add_monoid_hom.add_submonoid_map AddMonoidHom.addSubmonoidMap
 -/
Diff
@@ -779,18 +779,18 @@ instance (priority := 75) toLinearOrderedCancelCommMonoid {M} [LinearOrderedCanc
 #align add_submonoid_class.to_linear_ordered_cancel_add_comm_monoid AddSubmonoidClass.toLinearOrderedCancelAddCommMonoid
 -/
 
-#print SubmonoidClass.Subtype /-
+#print SubmonoidClass.subtype /-
 /-- The natural monoid hom from a submonoid of monoid `M` to `M`. -/
 @[to_additive "The natural monoid hom from an `add_submonoid` of `add_monoid` `M` to `M`."]
-def Subtype : S' →* M :=
+def subtype : S' →* M :=
   ⟨coe, rfl, fun _ _ => rfl⟩
-#align submonoid_class.subtype SubmonoidClass.Subtype
-#align add_submonoid_class.subtype AddSubmonoidClass.Subtype
+#align submonoid_class.subtype SubmonoidClass.subtype
+#align add_submonoid_class.subtype AddSubmonoidClass.subtype
 -/
 
 #print SubmonoidClass.coe_subtype /-
 @[simp, to_additive]
-theorem coe_subtype : (SubmonoidClass.Subtype S' : S' → M) = coe :=
+theorem coe_subtype : (SubmonoidClass.subtype S' : S' → M) = coe :=
   rfl
 #align submonoid_class.coe_subtype SubmonoidClass.coe_subtype
 #align add_submonoid_class.coe_subtype AddSubmonoidClass.coe_subtype
@@ -1333,7 +1333,7 @@ theorem map_mclosure (f : F) (s : Set M) : (closure s).map f = closure (f '' s)
 @[to_additive "Restriction of an add_monoid hom to an `add_submonoid` of the domain."]
 def restrict {N S : Type _} [MulOneClass N] [SetLike S M] [SubmonoidClass S M] (f : M →* N)
     (s : S) : s →* N :=
-  f.comp (SubmonoidClass.Subtype _)
+  f.comp (SubmonoidClass.subtype _)
 #align monoid_hom.restrict MonoidHom.restrict
 #align add_monoid_hom.restrict AddMonoidHom.restrict
 -/
Diff
@@ -3,17 +3,14 @@ Copyright (c) 2018 Johannes Hölzl. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johannes Hölzl, Kenny Lau, Johan Commelin, Mario Carneiro, Kevin Buzzard,
 Amelia Livingston, Yury Kudryashov
-
-! This file was ported from Lean 3 source module group_theory.submonoid.operations
-! leanprover-community/mathlib commit cf8e77c636317b059a8ce20807a29cf3772a0640
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.Algebra.Order.Monoid.Cancel.Basic
 import Mathbin.GroupTheory.GroupAction.Defs
 import Mathbin.GroupTheory.Submonoid.Basic
 import Mathbin.GroupTheory.Subsemigroup.Operations
 
+#align_import group_theory.submonoid.operations from "leanprover-community/mathlib"@"cf8e77c636317b059a8ce20807a29cf3772a0640"
+
 /-!
 # Operations on `submonoid`s
 
Diff
@@ -80,6 +80,7 @@ variable {M N P : Type _} [MulOneClass M] [MulOneClass N] [MulOneClass P] (S : S
 
 section
 
+#print Submonoid.toAddSubmonoid /-
 /-- Submonoids of monoid `M` are isomorphic to additive submonoids of `additive M`. -/
 @[simps]
 def Submonoid.toAddSubmonoid : Submonoid M ≃o AddSubmonoid (Additive M)
@@ -96,19 +97,25 @@ def Submonoid.toAddSubmonoid : Submonoid M ≃o AddSubmonoid (Additive M)
   right_inv x := by cases x <;> rfl
   map_rel_iff' a b := Iff.rfl
 #align submonoid.to_add_submonoid Submonoid.toAddSubmonoid
+-/
 
+#print AddSubmonoid.toSubmonoid' /-
 /-- Additive submonoids of an additive monoid `additive M` are isomorphic to submonoids of `M`. -/
 abbrev AddSubmonoid.toSubmonoid' : AddSubmonoid (Additive M) ≃o Submonoid M :=
   Submonoid.toAddSubmonoid.symm
 #align add_submonoid.to_submonoid' AddSubmonoid.toSubmonoid'
+-/
 
+#print Submonoid.toAddSubmonoid_closure /-
 theorem Submonoid.toAddSubmonoid_closure (S : Set M) :
     (Submonoid.closure S).toAddSubmonoid = AddSubmonoid.closure (Additive.toMul ⁻¹' S) :=
   le_antisymm
     (Submonoid.toAddSubmonoid.le_symm_apply.1 <| Submonoid.closure_le.2 AddSubmonoid.subset_closure)
     (AddSubmonoid.closure_le.2 Submonoid.subset_closure)
 #align submonoid.to_add_submonoid_closure Submonoid.toAddSubmonoid_closure
+-/
 
+#print AddSubmonoid.toSubmonoid'_closure /-
 theorem AddSubmonoid.toSubmonoid'_closure (S : Set (Additive M)) :
     (AddSubmonoid.closure S).toSubmonoid' = Submonoid.closure (Multiplicative.ofAdd ⁻¹' S) :=
   le_antisymm
@@ -116,6 +123,7 @@ theorem AddSubmonoid.toSubmonoid'_closure (S : Set (Additive M)) :
       AddSubmonoid.closure_le.2 Submonoid.subset_closure)
     (Submonoid.closure_le.2 AddSubmonoid.subset_closure)
 #align add_submonoid.to_submonoid'_closure AddSubmonoid.toSubmonoid'_closure
+-/
 
 end
 
@@ -123,6 +131,7 @@ section
 
 variable {A : Type _} [AddZeroClass A]
 
+#print AddSubmonoid.toSubmonoid /-
 /-- Additive submonoids of an additive monoid `A` are isomorphic to
 multiplicative submonoids of `multiplicative A`. -/
 @[simps]
@@ -140,12 +149,16 @@ def AddSubmonoid.toSubmonoid : AddSubmonoid A ≃o Submonoid (Multiplicative A)
   right_inv x := by cases x <;> rfl
   map_rel_iff' a b := Iff.rfl
 #align add_submonoid.to_submonoid AddSubmonoid.toSubmonoid
+-/
 
+#print Submonoid.toAddSubmonoid' /-
 /-- Submonoids of a monoid `multiplicative A` are isomorphic to additive submonoids of `A`. -/
 abbrev Submonoid.toAddSubmonoid' : Submonoid (Multiplicative A) ≃o AddSubmonoid A :=
   AddSubmonoid.toSubmonoid.symm
 #align submonoid.to_add_submonoid' Submonoid.toAddSubmonoid'
+-/
 
+#print AddSubmonoid.toSubmonoid_closure /-
 theorem AddSubmonoid.toSubmonoid_closure (S : Set A) :
     (AddSubmonoid.closure S).toSubmonoid = Submonoid.closure (Multiplicative.toAdd ⁻¹' S) :=
   le_antisymm
@@ -153,7 +166,9 @@ theorem AddSubmonoid.toSubmonoid_closure (S : Set A) :
       AddSubmonoid.closure_le.2 Submonoid.subset_closure)
     (Submonoid.closure_le.2 AddSubmonoid.subset_closure)
 #align add_submonoid.to_submonoid_closure AddSubmonoid.toSubmonoid_closure
+-/
 
+#print Submonoid.toAddSubmonoid'_closure /-
 theorem Submonoid.toAddSubmonoid'_closure (S : Set (Multiplicative A)) :
     (Submonoid.closure S).toAddSubmonoid' = AddSubmonoid.closure (Additive.ofMul ⁻¹' S) :=
   le_antisymm
@@ -161,6 +176,7 @@ theorem Submonoid.toAddSubmonoid'_closure (S : Set (Multiplicative A)) :
       Submonoid.closure_le.2 AddSubmonoid.subset_closure)
     (AddSubmonoid.closure_le.2 Submonoid.subset_closure)
 #align submonoid.to_add_submonoid'_closure Submonoid.toAddSubmonoid'_closure
+-/
 
 end
 
@@ -175,8 +191,6 @@ open Set
 -/
 
 
-include mc
-
 #print Submonoid.comap /-
 /-- The preimage of a submonoid along a monoid homomorphism is a submonoid. -/
 @[to_additive
@@ -190,19 +204,21 @@ def comap (f : F) (S : Submonoid N) : Submonoid M
 #align add_submonoid.comap AddSubmonoid.comap
 -/
 
+#print Submonoid.coe_comap /-
 @[simp, to_additive]
 theorem coe_comap (S : Submonoid N) (f : F) : (S.comap f : Set M) = f ⁻¹' S :=
   rfl
 #align submonoid.coe_comap Submonoid.coe_comap
 #align add_submonoid.coe_comap AddSubmonoid.coe_comap
+-/
 
+#print Submonoid.mem_comap /-
 @[simp, to_additive]
 theorem mem_comap {S : Submonoid N} {f : F} {x : M} : x ∈ S.comap f ↔ f x ∈ S :=
   Iff.rfl
 #align submonoid.mem_comap Submonoid.mem_comap
 #align add_submonoid.mem_comap AddSubmonoid.mem_comap
-
-omit mc
+-/
 
 #print Submonoid.comap_comap /-
 @[to_additive]
@@ -221,8 +237,6 @@ theorem comap_id (S : Submonoid P) : S.comap (MonoidHom.id P) = S :=
 #align add_submonoid.comap_id AddSubmonoid.comap_id
 -/
 
-include mc
-
 #print Submonoid.map /-
 /-- The image of a submonoid along a monoid homomorphism is a submonoid. -/
 @[to_additive
@@ -237,145 +251,183 @@ def map (f : F) (S : Submonoid M) : Submonoid N
 #align add_submonoid.map AddSubmonoid.map
 -/
 
+#print Submonoid.coe_map /-
 @[simp, to_additive]
 theorem coe_map (f : F) (S : Submonoid M) : (S.map f : Set N) = f '' S :=
   rfl
 #align submonoid.coe_map Submonoid.coe_map
 #align add_submonoid.coe_map AddSubmonoid.coe_map
+-/
 
+#print Submonoid.mem_map /-
 @[simp, to_additive]
 theorem mem_map {f : F} {S : Submonoid M} {y : N} : y ∈ S.map f ↔ ∃ x ∈ S, f x = y :=
   mem_image_iff_bex
 #align submonoid.mem_map Submonoid.mem_map
 #align add_submonoid.mem_map AddSubmonoid.mem_map
+-/
 
+#print Submonoid.mem_map_of_mem /-
 @[to_additive]
 theorem mem_map_of_mem (f : F) {S : Submonoid M} {x : M} (hx : x ∈ S) : f x ∈ S.map f :=
   mem_image_of_mem f hx
 #align submonoid.mem_map_of_mem Submonoid.mem_map_of_mem
 #align add_submonoid.mem_map_of_mem AddSubmonoid.mem_map_of_mem
+-/
 
+#print Submonoid.apply_coe_mem_map /-
 @[to_additive]
 theorem apply_coe_mem_map (f : F) (S : Submonoid M) (x : S) : f x ∈ S.map f :=
   mem_map_of_mem f x.Prop
 #align submonoid.apply_coe_mem_map Submonoid.apply_coe_mem_map
 #align add_submonoid.apply_coe_mem_map AddSubmonoid.apply_coe_mem_map
+-/
 
-omit mc
-
+#print Submonoid.map_map /-
 @[to_additive]
 theorem map_map (g : N →* P) (f : M →* N) : (S.map f).map g = S.map (g.comp f) :=
   SetLike.coe_injective <| image_image _ _ _
 #align submonoid.map_map Submonoid.map_map
 #align add_submonoid.map_map AddSubmonoid.map_map
+-/
 
-include mc
-
+#print Submonoid.mem_map_iff_mem /-
 @[to_additive]
 theorem mem_map_iff_mem {f : F} (hf : Function.Injective f) {S : Submonoid M} {x : M} :
     f x ∈ S.map f ↔ x ∈ S :=
   hf.mem_set_image
 #align submonoid.mem_map_iff_mem Submonoid.mem_map_iff_mem
 #align add_submonoid.mem_map_iff_mem AddSubmonoid.mem_map_iff_mem
+-/
 
+#print Submonoid.map_le_iff_le_comap /-
 @[to_additive]
 theorem map_le_iff_le_comap {f : F} {S : Submonoid M} {T : Submonoid N} :
     S.map f ≤ T ↔ S ≤ T.comap f :=
   image_subset_iff
 #align submonoid.map_le_iff_le_comap Submonoid.map_le_iff_le_comap
 #align add_submonoid.map_le_iff_le_comap AddSubmonoid.map_le_iff_le_comap
+-/
 
+#print Submonoid.gc_map_comap /-
 @[to_additive]
 theorem gc_map_comap (f : F) : GaloisConnection (map f) (comap f) := fun S T => map_le_iff_le_comap
 #align submonoid.gc_map_comap Submonoid.gc_map_comap
 #align add_submonoid.gc_map_comap AddSubmonoid.gc_map_comap
+-/
 
+#print Submonoid.map_le_of_le_comap /-
 @[to_additive]
 theorem map_le_of_le_comap {T : Submonoid N} {f : F} : S ≤ T.comap f → S.map f ≤ T :=
   (gc_map_comap f).l_le
 #align submonoid.map_le_of_le_comap Submonoid.map_le_of_le_comap
 #align add_submonoid.map_le_of_le_comap AddSubmonoid.map_le_of_le_comap
+-/
 
+#print Submonoid.le_comap_of_map_le /-
 @[to_additive]
 theorem le_comap_of_map_le {T : Submonoid N} {f : F} : S.map f ≤ T → S ≤ T.comap f :=
   (gc_map_comap f).le_u
 #align submonoid.le_comap_of_map_le Submonoid.le_comap_of_map_le
 #align add_submonoid.le_comap_of_map_le AddSubmonoid.le_comap_of_map_le
+-/
 
+#print Submonoid.le_comap_map /-
 @[to_additive]
 theorem le_comap_map {f : F} : S ≤ (S.map f).comap f :=
   (gc_map_comap f).le_u_l _
 #align submonoid.le_comap_map Submonoid.le_comap_map
 #align add_submonoid.le_comap_map AddSubmonoid.le_comap_map
+-/
 
+#print Submonoid.map_comap_le /-
 @[to_additive]
 theorem map_comap_le {S : Submonoid N} {f : F} : (S.comap f).map f ≤ S :=
   (gc_map_comap f).l_u_le _
 #align submonoid.map_comap_le Submonoid.map_comap_le
 #align add_submonoid.map_comap_le AddSubmonoid.map_comap_le
+-/
 
+#print Submonoid.monotone_map /-
 @[to_additive]
 theorem monotone_map {f : F} : Monotone (map f) :=
   (gc_map_comap f).monotone_l
 #align submonoid.monotone_map Submonoid.monotone_map
 #align add_submonoid.monotone_map AddSubmonoid.monotone_map
+-/
 
+#print Submonoid.monotone_comap /-
 @[to_additive]
 theorem monotone_comap {f : F} : Monotone (comap f) :=
   (gc_map_comap f).monotone_u
 #align submonoid.monotone_comap Submonoid.monotone_comap
 #align add_submonoid.monotone_comap AddSubmonoid.monotone_comap
+-/
 
+#print Submonoid.map_comap_map /-
 @[simp, to_additive]
 theorem map_comap_map {f : F} : ((S.map f).comap f).map f = S.map f :=
   (gc_map_comap f).l_u_l_eq_l _
 #align submonoid.map_comap_map Submonoid.map_comap_map
 #align add_submonoid.map_comap_map AddSubmonoid.map_comap_map
+-/
 
+#print Submonoid.comap_map_comap /-
 @[simp, to_additive]
 theorem comap_map_comap {S : Submonoid N} {f : F} : ((S.comap f).map f).comap f = S.comap f :=
   (gc_map_comap f).u_l_u_eq_u _
 #align submonoid.comap_map_comap Submonoid.comap_map_comap
 #align add_submonoid.comap_map_comap AddSubmonoid.comap_map_comap
+-/
 
+#print Submonoid.map_sup /-
 @[to_additive]
 theorem map_sup (S T : Submonoid M) (f : F) : (S ⊔ T).map f = S.map f ⊔ T.map f :=
   (gc_map_comap f : GaloisConnection (map f) (comap f)).l_sup
 #align submonoid.map_sup Submonoid.map_sup
 #align add_submonoid.map_sup AddSubmonoid.map_sup
+-/
 
+#print Submonoid.map_iSup /-
 @[to_additive]
 theorem map_iSup {ι : Sort _} (f : F) (s : ι → Submonoid M) : (iSup s).map f = ⨆ i, (s i).map f :=
   (gc_map_comap f : GaloisConnection (map f) (comap f)).l_iSup
 #align submonoid.map_supr Submonoid.map_iSup
 #align add_submonoid.map_supr AddSubmonoid.map_iSup
+-/
 
+#print Submonoid.comap_inf /-
 @[to_additive]
 theorem comap_inf (S T : Submonoid N) (f : F) : (S ⊓ T).comap f = S.comap f ⊓ T.comap f :=
   (gc_map_comap f : GaloisConnection (map f) (comap f)).u_inf
 #align submonoid.comap_inf Submonoid.comap_inf
 #align add_submonoid.comap_inf AddSubmonoid.comap_inf
+-/
 
+#print Submonoid.comap_iInf /-
 @[to_additive]
 theorem comap_iInf {ι : Sort _} (f : F) (s : ι → Submonoid N) :
     (iInf s).comap f = ⨅ i, (s i).comap f :=
   (gc_map_comap f : GaloisConnection (map f) (comap f)).u_iInf
 #align submonoid.comap_infi Submonoid.comap_iInf
 #align add_submonoid.comap_infi AddSubmonoid.comap_iInf
+-/
 
+#print Submonoid.map_bot /-
 @[simp, to_additive]
 theorem map_bot (f : F) : (⊥ : Submonoid M).map f = ⊥ :=
   (gc_map_comap f).l_bot
 #align submonoid.map_bot Submonoid.map_bot
 #align add_submonoid.map_bot AddSubmonoid.map_bot
+-/
 
+#print Submonoid.comap_top /-
 @[simp, to_additive]
 theorem comap_top (f : F) : (⊤ : Submonoid N).comap f = ⊤ :=
   (gc_map_comap f).u_top
 #align submonoid.comap_top Submonoid.comap_top
 #align add_submonoid.comap_top AddSubmonoid.comap_top
-
-omit mc
+-/
 
 #print Submonoid.map_id /-
 @[simp, to_additive]
@@ -389,68 +441,86 @@ section GaloisCoinsertion
 
 variable {ι : Type _} {f : F} (hf : Function.Injective f)
 
-include hf
-
+#print Submonoid.gciMapComap /-
 /-- `map f` and `comap f` form a `galois_coinsertion` when `f` is injective. -/
 @[to_additive " `map f` and `comap f` form a `galois_coinsertion` when `f` is injective. "]
 def gciMapComap : GaloisCoinsertion (map f) (comap f) :=
   (gc_map_comap f).toGaloisCoinsertion fun S x => by simp [mem_comap, mem_map, hf.eq_iff]
 #align submonoid.gci_map_comap Submonoid.gciMapComap
 #align add_submonoid.gci_map_comap AddSubmonoid.gciMapComap
+-/
 
+#print Submonoid.comap_map_eq_of_injective /-
 @[to_additive]
 theorem comap_map_eq_of_injective (S : Submonoid M) : (S.map f).comap f = S :=
   (gciMapComap hf).u_l_eq _
 #align submonoid.comap_map_eq_of_injective Submonoid.comap_map_eq_of_injective
 #align add_submonoid.comap_map_eq_of_injective AddSubmonoid.comap_map_eq_of_injective
+-/
 
+#print Submonoid.comap_surjective_of_injective /-
 @[to_additive]
 theorem comap_surjective_of_injective : Function.Surjective (comap f) :=
   (gciMapComap hf).u_surjective
 #align submonoid.comap_surjective_of_injective Submonoid.comap_surjective_of_injective
 #align add_submonoid.comap_surjective_of_injective AddSubmonoid.comap_surjective_of_injective
+-/
 
+#print Submonoid.map_injective_of_injective /-
 @[to_additive]
 theorem map_injective_of_injective : Function.Injective (map f) :=
   (gciMapComap hf).l_injective
 #align submonoid.map_injective_of_injective Submonoid.map_injective_of_injective
 #align add_submonoid.map_injective_of_injective AddSubmonoid.map_injective_of_injective
+-/
 
+#print Submonoid.comap_inf_map_of_injective /-
 @[to_additive]
 theorem comap_inf_map_of_injective (S T : Submonoid M) : (S.map f ⊓ T.map f).comap f = S ⊓ T :=
   (gciMapComap hf).u_inf_l _ _
 #align submonoid.comap_inf_map_of_injective Submonoid.comap_inf_map_of_injective
 #align add_submonoid.comap_inf_map_of_injective AddSubmonoid.comap_inf_map_of_injective
+-/
 
+#print Submonoid.comap_iInf_map_of_injective /-
 @[to_additive]
 theorem comap_iInf_map_of_injective (S : ι → Submonoid M) : (⨅ i, (S i).map f).comap f = iInf S :=
   (gciMapComap hf).u_iInf_l _
 #align submonoid.comap_infi_map_of_injective Submonoid.comap_iInf_map_of_injective
 #align add_submonoid.comap_infi_map_of_injective AddSubmonoid.comap_iInf_map_of_injective
+-/
 
+#print Submonoid.comap_sup_map_of_injective /-
 @[to_additive]
 theorem comap_sup_map_of_injective (S T : Submonoid M) : (S.map f ⊔ T.map f).comap f = S ⊔ T :=
   (gciMapComap hf).u_sup_l _ _
 #align submonoid.comap_sup_map_of_injective Submonoid.comap_sup_map_of_injective
 #align add_submonoid.comap_sup_map_of_injective AddSubmonoid.comap_sup_map_of_injective
+-/
 
+#print Submonoid.comap_iSup_map_of_injective /-
 @[to_additive]
 theorem comap_iSup_map_of_injective (S : ι → Submonoid M) : (⨆ i, (S i).map f).comap f = iSup S :=
   (gciMapComap hf).u_iSup_l _
 #align submonoid.comap_supr_map_of_injective Submonoid.comap_iSup_map_of_injective
 #align add_submonoid.comap_supr_map_of_injective AddSubmonoid.comap_iSup_map_of_injective
+-/
 
+#print Submonoid.map_le_map_iff_of_injective /-
 @[to_additive]
 theorem map_le_map_iff_of_injective {S T : Submonoid M} : S.map f ≤ T.map f ↔ S ≤ T :=
   (gciMapComap hf).l_le_l_iff
 #align submonoid.map_le_map_iff_of_injective Submonoid.map_le_map_iff_of_injective
 #align add_submonoid.map_le_map_iff_of_injective AddSubmonoid.map_le_map_iff_of_injective
+-/
 
+#print Submonoid.map_strictMono_of_injective /-
 @[to_additive]
 theorem map_strictMono_of_injective : StrictMono (map f) :=
   (gciMapComap hf).strictMono_l
 #align submonoid.map_strict_mono_of_injective Submonoid.map_strictMono_of_injective
 #align add_submonoid.map_strict_mono_of_injective AddSubmonoid.map_strictMono_of_injective
+-/
 
 end GaloisCoinsertion
 
@@ -458,8 +528,7 @@ section GaloisInsertion
 
 variable {ι : Type _} {f : F} (hf : Function.Surjective f)
 
-include hf
-
+#print Submonoid.giMapComap /-
 /-- `map f` and `comap f` form a `galois_insertion` when `f` is surjective. -/
 @[to_additive " `map f` and `comap f` form a `galois_insertion` when `f` is surjective. "]
 def giMapComap : GaloisInsertion (map f) (comap f) :=
@@ -468,60 +537,79 @@ def giMapComap : GaloisInsertion (map f) (comap f) :=
     mem_map.2 ⟨y, by simp [hy, h]⟩
 #align submonoid.gi_map_comap Submonoid.giMapComap
 #align add_submonoid.gi_map_comap AddSubmonoid.giMapComap
+-/
 
+#print Submonoid.map_comap_eq_of_surjective /-
 @[to_additive]
 theorem map_comap_eq_of_surjective (S : Submonoid N) : (S.comap f).map f = S :=
   (giMapComap hf).l_u_eq _
 #align submonoid.map_comap_eq_of_surjective Submonoid.map_comap_eq_of_surjective
 #align add_submonoid.map_comap_eq_of_surjective AddSubmonoid.map_comap_eq_of_surjective
+-/
 
+#print Submonoid.map_surjective_of_surjective /-
 @[to_additive]
 theorem map_surjective_of_surjective : Function.Surjective (map f) :=
   (giMapComap hf).l_surjective
 #align submonoid.map_surjective_of_surjective Submonoid.map_surjective_of_surjective
 #align add_submonoid.map_surjective_of_surjective AddSubmonoid.map_surjective_of_surjective
+-/
 
+#print Submonoid.comap_injective_of_surjective /-
 @[to_additive]
 theorem comap_injective_of_surjective : Function.Injective (comap f) :=
   (giMapComap hf).u_injective
 #align submonoid.comap_injective_of_surjective Submonoid.comap_injective_of_surjective
 #align add_submonoid.comap_injective_of_surjective AddSubmonoid.comap_injective_of_surjective
+-/
 
+#print Submonoid.map_inf_comap_of_surjective /-
 @[to_additive]
 theorem map_inf_comap_of_surjective (S T : Submonoid N) : (S.comap f ⊓ T.comap f).map f = S ⊓ T :=
   (giMapComap hf).l_inf_u _ _
 #align submonoid.map_inf_comap_of_surjective Submonoid.map_inf_comap_of_surjective
 #align add_submonoid.map_inf_comap_of_surjective AddSubmonoid.map_inf_comap_of_surjective
+-/
 
+#print Submonoid.map_iInf_comap_of_surjective /-
 @[to_additive]
 theorem map_iInf_comap_of_surjective (S : ι → Submonoid N) : (⨅ i, (S i).comap f).map f = iInf S :=
   (giMapComap hf).l_iInf_u _
 #align submonoid.map_infi_comap_of_surjective Submonoid.map_iInf_comap_of_surjective
 #align add_submonoid.map_infi_comap_of_surjective AddSubmonoid.map_iInf_comap_of_surjective
+-/
 
+#print Submonoid.map_sup_comap_of_surjective /-
 @[to_additive]
 theorem map_sup_comap_of_surjective (S T : Submonoid N) : (S.comap f ⊔ T.comap f).map f = S ⊔ T :=
   (giMapComap hf).l_sup_u _ _
 #align submonoid.map_sup_comap_of_surjective Submonoid.map_sup_comap_of_surjective
 #align add_submonoid.map_sup_comap_of_surjective AddSubmonoid.map_sup_comap_of_surjective
+-/
 
+#print Submonoid.map_iSup_comap_of_surjective /-
 @[to_additive]
 theorem map_iSup_comap_of_surjective (S : ι → Submonoid N) : (⨆ i, (S i).comap f).map f = iSup S :=
   (giMapComap hf).l_iSup_u _
 #align submonoid.map_supr_comap_of_surjective Submonoid.map_iSup_comap_of_surjective
 #align add_submonoid.map_supr_comap_of_surjective AddSubmonoid.map_iSup_comap_of_surjective
+-/
 
+#print Submonoid.comap_le_comap_iff_of_surjective /-
 @[to_additive]
 theorem comap_le_comap_iff_of_surjective {S T : Submonoid N} : S.comap f ≤ T.comap f ↔ S ≤ T :=
   (giMapComap hf).u_le_u_iff
 #align submonoid.comap_le_comap_iff_of_surjective Submonoid.comap_le_comap_iff_of_surjective
 #align add_submonoid.comap_le_comap_iff_of_surjective AddSubmonoid.comap_le_comap_iff_of_surjective
+-/
 
+#print Submonoid.comap_strictMono_of_surjective /-
 @[to_additive]
 theorem comap_strictMono_of_surjective : StrictMono (comap f) :=
   (giMapComap hf).strictMono_u
 #align submonoid.comap_strict_mono_of_surjective Submonoid.comap_strictMono_of_surjective
 #align add_submonoid.comap_strict_mono_of_surjective AddSubmonoid.comap_strictMono_of_surjective
+-/
 
 end GaloisInsertion
 
@@ -531,8 +619,6 @@ namespace OneMemClass
 
 variable {A M₁ : Type _} [SetLike A M₁] [One M₁] [hA : OneMemClass A M₁] (S' : A)
 
-include hA
-
 #print OneMemClass.one /-
 /-- A submonoid of a monoid inherits a 1. -/
 @[to_additive "An `add_submonoid` of an `add_monoid` inherits a zero."]
@@ -593,19 +679,23 @@ instance nPow {M} [Monoid M] {A : Type _} [SetLike A M] [SubmonoidClass A M] (S
 
 attribute [to_additive] SubmonoidClass.nPow
 
+#print SubmonoidClass.coe_pow /-
 @[simp, norm_cast, to_additive]
 theorem coe_pow {M} [Monoid M] {A : Type _} [SetLike A M] [SubmonoidClass A M] {S : A} (x : S)
     (n : ℕ) : (↑(x ^ n) : M) = ↑x ^ n :=
   rfl
 #align submonoid_class.coe_pow SubmonoidClass.coe_pow
 #align add_submonoid_class.coe_nsmul AddSubmonoidClass.coe_nsmul
+-/
 
+#print SubmonoidClass.mk_pow /-
 @[simp, to_additive]
 theorem mk_pow {M} [Monoid M] {A : Type _} [SetLike A M] [SubmonoidClass A M] {S : A} (x : M)
     (hx : x ∈ S) (n : ℕ) : (⟨x, hx⟩ : S) ^ n = ⟨x ^ n, pow_mem hx n⟩ :=
   rfl
 #align submonoid_class.mk_pow SubmonoidClass.mk_pow
 #align add_submonoid_class.mk_nsmul AddSubmonoidClass.mk_nsmul
+-/
 
 #print SubmonoidClass.toMulOneClass /-
 -- Prefer subclasses of `monoid` over subclasses of `submonoid_class`.
@@ -692,8 +782,6 @@ instance (priority := 75) toLinearOrderedCancelCommMonoid {M} [LinearOrderedCanc
 #align add_submonoid_class.to_linear_ordered_cancel_add_comm_monoid AddSubmonoidClass.toLinearOrderedCancelAddCommMonoid
 -/
 
-include hA
-
 #print SubmonoidClass.Subtype /-
 /-- The natural monoid hom from a submonoid of monoid `M` to `M`. -/
 @[to_additive "The natural monoid hom from an `add_submonoid` of `add_monoid` `M` to `M`."]
@@ -703,61 +791,78 @@ def Subtype : S' →* M :=
 #align add_submonoid_class.subtype AddSubmonoidClass.Subtype
 -/
 
+#print SubmonoidClass.coe_subtype /-
 @[simp, to_additive]
 theorem coe_subtype : (SubmonoidClass.Subtype S' : S' → M) = coe :=
   rfl
 #align submonoid_class.coe_subtype SubmonoidClass.coe_subtype
 #align add_submonoid_class.coe_subtype AddSubmonoidClass.coe_subtype
+-/
 
 end SubmonoidClass
 
 namespace Submonoid
 
+#print Submonoid.mul /-
 /-- A submonoid of a monoid inherits a multiplication. -/
 @[to_additive "An `add_submonoid` of an `add_monoid` inherits an addition."]
 instance mul : Mul S :=
   ⟨fun a b => ⟨a.1 * b.1, S.mul_mem a.2 b.2⟩⟩
 #align submonoid.has_mul Submonoid.mul
 #align add_submonoid.has_add AddSubmonoid.add
+-/
 
+#print Submonoid.one /-
 /-- A submonoid of a monoid inherits a 1. -/
 @[to_additive "An `add_submonoid` of an `add_monoid` inherits a zero."]
 instance one : One S :=
   ⟨⟨_, S.one_mem⟩⟩
 #align submonoid.has_one Submonoid.one
 #align add_submonoid.has_zero AddSubmonoid.zero
+-/
 
+#print Submonoid.coe_mul /-
 @[simp, norm_cast, to_additive]
 theorem coe_mul (x y : S) : (↑(x * y) : M) = ↑x * ↑y :=
   rfl
 #align submonoid.coe_mul Submonoid.coe_mul
 #align add_submonoid.coe_add AddSubmonoid.coe_add
+-/
 
+#print Submonoid.coe_one /-
 @[simp, norm_cast, to_additive]
 theorem coe_one : ((1 : S) : M) = 1 :=
   rfl
 #align submonoid.coe_one Submonoid.coe_one
 #align add_submonoid.coe_zero AddSubmonoid.coe_zero
+-/
 
+#print Submonoid.mk_mul_mk /-
 @[simp, to_additive]
 theorem mk_mul_mk (x y : M) (hx : x ∈ S) (hy : y ∈ S) :
     (⟨x, hx⟩ : S) * ⟨y, hy⟩ = ⟨x * y, S.mul_mem hx hy⟩ :=
   rfl
 #align submonoid.mk_mul_mk Submonoid.mk_mul_mk
 #align add_submonoid.mk_add_mk AddSubmonoid.mk_add_mk
+-/
 
+#print Submonoid.mul_def /-
 @[to_additive]
 theorem mul_def (x y : S) : x * y = ⟨x * y, S.mul_mem x.2 y.2⟩ :=
   rfl
 #align submonoid.mul_def Submonoid.mul_def
 #align add_submonoid.add_def AddSubmonoid.add_def
+-/
 
+#print Submonoid.one_def /-
 @[to_additive]
 theorem one_def : (1 : S) = ⟨1, S.one_mem⟩ :=
   rfl
 #align submonoid.one_def Submonoid.one_def
 #align add_submonoid.zero_def AddSubmonoid.zero_def
+-/
 
+#print Submonoid.toMulOneClass /-
 /-- A submonoid of a unital magma inherits a unital magma structure. -/
 @[to_additive
       "An `add_submonoid` of an unital additive magma inherits an unital additive magma\nstructure."]
@@ -765,13 +870,16 @@ instance toMulOneClass {M : Type _} [MulOneClass M] (S : Submonoid M) : MulOneCl
   Subtype.coe_injective.MulOneClass coe rfl fun _ _ => rfl
 #align submonoid.to_mul_one_class Submonoid.toMulOneClass
 #align add_submonoid.to_add_zero_class AddSubmonoid.toAddZeroClass
+-/
 
+#print Submonoid.pow_mem /-
 @[to_additive]
 protected theorem pow_mem {M : Type _} [Monoid M] (S : Submonoid M) {x : M} (hx : x ∈ S) (n : ℕ) :
     x ^ n ∈ S :=
   pow_mem hx n
 #align submonoid.pow_mem Submonoid.pow_mem
 #align add_submonoid.nsmul_mem AddSubmonoid.nsmul_mem
+-/
 
 @[simp, norm_cast, to_additive]
 theorem coe_pow {M : Type _} [Monoid M] {S : Submonoid M} (x : S) (n : ℕ) :
@@ -780,20 +888,25 @@ theorem coe_pow {M : Type _} [Monoid M] {S : Submonoid M} (x : S) (n : ℕ) :
 #align submonoid.coe_pow Submonoid.coe_pow
 #align add_submonoid.coe_nsmul AddSubmonoid.coe_nsmul
 
+#print Submonoid.toMonoid /-
 /-- A submonoid of a monoid inherits a monoid structure. -/
 @[to_additive "An `add_submonoid` of an `add_monoid` inherits an `add_monoid`\nstructure."]
 instance toMonoid {M : Type _} [Monoid M] (S : Submonoid M) : Monoid S :=
   Subtype.coe_injective.Monoid coe rfl (fun _ _ => rfl) fun _ _ => rfl
 #align submonoid.to_monoid Submonoid.toMonoid
 #align add_submonoid.to_add_monoid AddSubmonoid.toAddMonoid
+-/
 
+#print Submonoid.toCommMonoid /-
 /-- A submonoid of a `comm_monoid` is a `comm_monoid`. -/
 @[to_additive "An `add_submonoid` of an `add_comm_monoid` is\nan `add_comm_monoid`."]
 instance toCommMonoid {M} [CommMonoid M] (S : Submonoid M) : CommMonoid S :=
   Subtype.coe_injective.CommMonoid coe rfl (fun _ _ => rfl) fun _ _ => rfl
 #align submonoid.to_comm_monoid Submonoid.toCommMonoid
 #align add_submonoid.to_add_comm_monoid AddSubmonoid.toAddCommMonoid
+-/
 
+#print Submonoid.toOrderedCommMonoid /-
 /-- A submonoid of an `ordered_comm_monoid` is an `ordered_comm_monoid`. -/
 @[to_additive
       "An `add_submonoid` of an `ordered_add_comm_monoid` is\nan `ordered_add_comm_monoid`."]
@@ -801,7 +914,9 @@ instance toOrderedCommMonoid {M} [OrderedCommMonoid M] (S : Submonoid M) : Order
   Subtype.coe_injective.OrderedCommMonoid coe rfl (fun _ _ => rfl) fun _ _ => rfl
 #align submonoid.to_ordered_comm_monoid Submonoid.toOrderedCommMonoid
 #align add_submonoid.to_ordered_add_comm_monoid AddSubmonoid.toOrderedAddCommMonoid
+-/
 
+#print Submonoid.toLinearOrderedCommMonoid /-
 /-- A submonoid of a `linear_ordered_comm_monoid` is a `linear_ordered_comm_monoid`. -/
 @[to_additive
       "An `add_submonoid` of a `linear_ordered_add_comm_monoid` is\na `linear_ordered_add_comm_monoid`."]
@@ -811,7 +926,9 @@ instance toLinearOrderedCommMonoid {M} [LinearOrderedCommMonoid M] (S : Submonoi
     (fun _ _ => rfl) fun _ _ => rfl
 #align submonoid.to_linear_ordered_comm_monoid Submonoid.toLinearOrderedCommMonoid
 #align add_submonoid.to_linear_ordered_add_comm_monoid AddSubmonoid.toLinearOrderedAddCommMonoid
+-/
 
+#print Submonoid.toOrderedCancelCommMonoid /-
 /-- A submonoid of an `ordered_cancel_comm_monoid` is an `ordered_cancel_comm_monoid`. -/
 @[to_additive
       "An `add_submonoid` of an `ordered_cancel_add_comm_monoid` is\nan `ordered_cancel_add_comm_monoid`."]
@@ -820,7 +937,9 @@ instance toOrderedCancelCommMonoid {M} [OrderedCancelCommMonoid M] (S : Submonoi
   Subtype.coe_injective.OrderedCancelCommMonoid coe rfl (fun _ _ => rfl) fun _ _ => rfl
 #align submonoid.to_ordered_cancel_comm_monoid Submonoid.toOrderedCancelCommMonoid
 #align add_submonoid.to_ordered_cancel_add_comm_monoid AddSubmonoid.toOrderedCancelAddCommMonoid
+-/
 
+#print Submonoid.toLinearOrderedCancelCommMonoid /-
 /-- A submonoid of a `linear_ordered_cancel_comm_monoid` is a `linear_ordered_cancel_comm_monoid`.
 -/
 @[to_additive
@@ -831,20 +950,26 @@ instance toLinearOrderedCancelCommMonoid {M} [LinearOrderedCancelCommMonoid M] (
     (fun _ _ => rfl) fun _ _ => rfl
 #align submonoid.to_linear_ordered_cancel_comm_monoid Submonoid.toLinearOrderedCancelCommMonoid
 #align add_submonoid.to_linear_ordered_cancel_add_comm_monoid AddSubmonoid.toLinearOrderedCancelAddCommMonoid
+-/
 
+#print Submonoid.subtype /-
 /-- The natural monoid hom from a submonoid of monoid `M` to `M`. -/
 @[to_additive "The natural monoid hom from an `add_submonoid` of `add_monoid` `M` to `M`."]
 def subtype : S →* M :=
   ⟨coe, rfl, fun _ _ => rfl⟩
 #align submonoid.subtype Submonoid.subtype
 #align add_submonoid.subtype AddSubmonoid.subtype
+-/
 
+#print Submonoid.coe_subtype /-
 @[simp, to_additive]
 theorem coe_subtype : ⇑S.Subtype = coe :=
   rfl
 #align submonoid.coe_subtype Submonoid.coe_subtype
 #align add_submonoid.coe_subtype AddSubmonoid.coe_subtype
+-/
 
+#print Submonoid.topEquiv /-
 /-- The top submonoid is isomorphic to the monoid. -/
 @[to_additive "The top additive submonoid is isomorphic to the additive monoid.", simps]
 def topEquiv : (⊤ : Submonoid M) ≃* M where
@@ -855,13 +980,17 @@ def topEquiv : (⊤ : Submonoid M) ≃* M where
   map_mul' _ _ := rfl
 #align submonoid.top_equiv Submonoid.topEquiv
 #align add_submonoid.top_equiv AddSubmonoid.topEquiv
+-/
 
+#print Submonoid.topEquiv_toMonoidHom /-
 @[simp, to_additive]
 theorem topEquiv_toMonoidHom : (topEquiv : _ ≃* M).toMonoidHom = (⊤ : Submonoid M).Subtype :=
   rfl
 #align submonoid.top_equiv_to_monoid_hom Submonoid.topEquiv_toMonoidHom
 #align add_submonoid.top_equiv_to_add_monoid_hom AddSubmonoid.topEquiv_toAddMonoidHom
+-/
 
+#print Submonoid.equivMapOfInjective /-
 /-- A subgroup is isomorphic to its image under an injective function. If you have an isomorphism,
 use `mul_equiv.submonoid_map` for better definitional equalities. -/
 @[to_additive
@@ -870,14 +999,18 @@ noncomputable def equivMapOfInjective (f : M →* N) (hf : Function.Injective f)
   { Equiv.Set.image f S hf with map_mul' := fun _ _ => Subtype.ext (f.map_mul _ _) }
 #align submonoid.equiv_map_of_injective Submonoid.equivMapOfInjective
 #align add_submonoid.equiv_map_of_injective AddSubmonoid.equivMapOfInjective
+-/
 
+#print Submonoid.coe_equivMapOfInjective_apply /-
 @[simp, to_additive]
 theorem coe_equivMapOfInjective_apply (f : M →* N) (hf : Function.Injective f) (x : S) :
     (equivMapOfInjective S f hf x : N) = f x :=
   rfl
 #align submonoid.coe_equiv_map_of_injective_apply Submonoid.coe_equivMapOfInjective_apply
 #align add_submonoid.coe_equiv_map_of_injective_apply AddSubmonoid.coe_equivMapOfInjective_apply
+-/
 
+#print Submonoid.closure_closure_coe_preimage /-
 @[simp, to_additive]
 theorem closure_closure_coe_preimage {s : Set M} : closure ((coe : closure s → M) ⁻¹' s) = ⊤ :=
   eq_top_iff.2 fun x =>
@@ -889,8 +1022,10 @@ theorem closure_closure_coe_preimage {s : Set M} : closure ((coe : closure s →
       · exact Submonoid.mul_mem _
 #align submonoid.closure_closure_coe_preimage Submonoid.closure_closure_coe_preimage
 #align add_submonoid.closure_closure_coe_preimage AddSubmonoid.closure_closure_coe_preimage
+-/
 
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Submonoid.prod /-
 /-- Given `submonoid`s `s`, `t` of monoids `M`, `N` respectively, `s × t` as a submonoid
 of `M × N`. -/
 @[to_additive Prod
@@ -902,52 +1037,68 @@ def prod (s : Submonoid M) (t : Submonoid N) : Submonoid (M × N)
   mul_mem' p q hp hq := ⟨s.mul_mem hp.1 hq.1, t.mul_mem hp.2 hq.2⟩
 #align submonoid.prod Submonoid.prod
 #align add_submonoid.prod AddSubmonoid.prod
+-/
 
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Submonoid.coe_prod /-
 @[to_additive coe_prod]
 theorem coe_prod (s : Submonoid M) (t : Submonoid N) : (s.Prod t : Set (M × N)) = s ×ˢ t :=
   rfl
 #align submonoid.coe_prod Submonoid.coe_prod
 #align add_submonoid.coe_prod AddSubmonoid.coe_prod
+-/
 
+#print Submonoid.mem_prod /-
 @[to_additive mem_prod]
 theorem mem_prod {s : Submonoid M} {t : Submonoid N} {p : M × N} :
     p ∈ s.Prod t ↔ p.1 ∈ s ∧ p.2 ∈ t :=
   Iff.rfl
 #align submonoid.mem_prod Submonoid.mem_prod
 #align add_submonoid.mem_prod AddSubmonoid.mem_prod
+-/
 
+#print Submonoid.prod_mono /-
 @[to_additive prod_mono]
 theorem prod_mono {s₁ s₂ : Submonoid M} {t₁ t₂ : Submonoid N} (hs : s₁ ≤ s₂) (ht : t₁ ≤ t₂) :
     s₁.Prod t₁ ≤ s₂.Prod t₂ :=
   Set.prod_mono hs ht
 #align submonoid.prod_mono Submonoid.prod_mono
 #align add_submonoid.prod_mono AddSubmonoid.prod_mono
+-/
 
+#print Submonoid.prod_top /-
 @[to_additive prod_top]
 theorem prod_top (s : Submonoid M) : s.Prod (⊤ : Submonoid N) = s.comap (MonoidHom.fst M N) :=
   ext fun x => by simp [mem_prod, MonoidHom.coe_fst]
 #align submonoid.prod_top Submonoid.prod_top
 #align add_submonoid.prod_top AddSubmonoid.prod_top
+-/
 
+#print Submonoid.top_prod /-
 @[to_additive top_prod]
 theorem top_prod (s : Submonoid N) : (⊤ : Submonoid M).Prod s = s.comap (MonoidHom.snd M N) :=
   ext fun x => by simp [mem_prod, MonoidHom.coe_snd]
 #align submonoid.top_prod Submonoid.top_prod
 #align add_submonoid.top_prod AddSubmonoid.top_prod
+-/
 
+#print Submonoid.top_prod_top /-
 @[simp, to_additive top_prod_top]
 theorem top_prod_top : (⊤ : Submonoid M).Prod (⊤ : Submonoid N) = ⊤ :=
   (top_prod _).trans <| comap_top _
 #align submonoid.top_prod_top Submonoid.top_prod_top
 #align add_submonoid.top_prod_top AddSubmonoid.top_prod_top
+-/
 
+#print Submonoid.bot_prod_bot /-
 @[to_additive]
 theorem bot_prod_bot : (⊥ : Submonoid M).Prod (⊥ : Submonoid N) = ⊥ :=
   SetLike.coe_injective <| by simp [coe_prod, Prod.one_eq_mk]
 #align submonoid.bot_prod_bot Submonoid.bot_prod_bot
 #align add_submonoid.bot_sum_bot AddSubmonoid.bot_prod_bot
+-/
 
+#print Submonoid.prodEquiv /-
 /-- The product of submonoids is isomorphic to their product as monoids. -/
 @[to_additive prod_equiv
       "The product of additive submonoids is isomorphic to their product\nas additive monoids"]
@@ -955,9 +1106,11 @@ def prodEquiv (s : Submonoid M) (t : Submonoid N) : s.Prod t ≃* s × t :=
   { Equiv.Set.prod ↑s ↑t with map_mul' := fun x y => rfl }
 #align submonoid.prod_equiv Submonoid.prodEquiv
 #align add_submonoid.prod_equiv AddSubmonoid.prodEquiv
+-/
 
 open MonoidHom
 
+#print Submonoid.map_inl /-
 @[to_additive]
 theorem map_inl (s : Submonoid M) : s.map (inl M N) = s.Prod ⊥ :=
   ext fun p =>
@@ -965,7 +1118,9 @@ theorem map_inl (s : Submonoid M) : s.map (inl M N) = s.Prod ⊥ :=
       ⟨p.1, hps, Prod.ext rfl <| (Set.eq_of_mem_singleton hp1).symm⟩⟩
 #align submonoid.map_inl Submonoid.map_inl
 #align add_submonoid.map_inl AddSubmonoid.map_inl
+-/
 
+#print Submonoid.map_inr /-
 @[to_additive]
 theorem map_inr (s : Submonoid N) : s.map (inr M N) = prod ⊥ s :=
   ext fun p =>
@@ -973,7 +1128,9 @@ theorem map_inr (s : Submonoid N) : s.map (inr M N) = prod ⊥ s :=
       ⟨p.2, hps, Prod.ext (Set.eq_of_mem_singleton hp1).symm rfl⟩⟩
 #align submonoid.map_inr Submonoid.map_inr
 #align add_submonoid.map_inr AddSubmonoid.map_inr
+-/
 
+#print Submonoid.prod_bot_sup_bot_prod /-
 @[simp, to_additive prod_bot_sup_bot_prod]
 theorem prod_bot_sup_bot_prod (s : Submonoid M) (t : Submonoid N) :
     s.Prod ⊥ ⊔ prod ⊥ t = s.Prod t :=
@@ -983,34 +1140,44 @@ theorem prod_bot_sup_bot_prod (s : Submonoid M) (t : Submonoid N) :
         ((le_sup_right : prod ⊥ t ≤ s.Prod ⊥ ⊔ prod ⊥ t) ⟨Set.mem_singleton 1, hp.2⟩)
 #align submonoid.prod_bot_sup_bot_prod Submonoid.prod_bot_sup_bot_prod
 #align add_submonoid.prod_bot_sup_bot_prod AddSubmonoid.prod_bot_sup_bot_prod
+-/
 
+#print Submonoid.mem_map_equiv /-
 @[to_additive]
 theorem mem_map_equiv {f : M ≃* N} {K : Submonoid M} {x : N} :
     x ∈ K.map f.toMonoidHom ↔ f.symm x ∈ K :=
   @Set.mem_image_equiv _ _ (↑K) f.toEquiv x
 #align submonoid.mem_map_equiv Submonoid.mem_map_equiv
 #align add_submonoid.mem_map_equiv AddSubmonoid.mem_map_equiv
+-/
 
+#print Submonoid.map_equiv_eq_comap_symm /-
 @[to_additive]
 theorem map_equiv_eq_comap_symm (f : M ≃* N) (K : Submonoid M) :
     K.map f.toMonoidHom = K.comap f.symm.toMonoidHom :=
   SetLike.coe_injective (f.toEquiv.image_eq_preimage K)
 #align submonoid.map_equiv_eq_comap_symm Submonoid.map_equiv_eq_comap_symm
 #align add_submonoid.map_equiv_eq_comap_symm AddSubmonoid.map_equiv_eq_comap_symm
+-/
 
+#print Submonoid.comap_equiv_eq_map_symm /-
 @[to_additive]
 theorem comap_equiv_eq_map_symm (f : N ≃* M) (K : Submonoid M) :
     K.comap f.toMonoidHom = K.map f.symm.toMonoidHom :=
   (map_equiv_eq_comap_symm f.symm K).symm
 #align submonoid.comap_equiv_eq_map_symm Submonoid.comap_equiv_eq_map_symm
 #align add_submonoid.comap_equiv_eq_map_symm AddSubmonoid.comap_equiv_eq_map_symm
+-/
 
+#print Submonoid.map_equiv_top /-
 @[simp, to_additive]
 theorem map_equiv_top (f : M ≃* N) : (⊤ : Submonoid M).map f.toMonoidHom = ⊤ :=
   SetLike.coe_injective <| Set.image_univ.trans f.Surjective.range_eq
 #align submonoid.map_equiv_top Submonoid.map_equiv_top
 #align add_submonoid.map_equiv_top AddSubmonoid.map_equiv_top
+-/
 
+#print Submonoid.le_prod_iff /-
 @[to_additive le_prod_iff]
 theorem le_prod_iff {s : Submonoid M} {t : Submonoid N} {u : Submonoid (M × N)} :
     u ≤ s.Prod t ↔ u.map (fst M N) ≤ s ∧ u.map (snd M N) ≤ t :=
@@ -1023,7 +1190,9 @@ theorem le_prod_iff {s : Submonoid M} {t : Submonoid N} {u : Submonoid (M × N)}
   · rintro ⟨hH, hK⟩ ⟨x1, x2⟩ h; exact ⟨hH ⟨_, h, rfl⟩, hK ⟨_, h, rfl⟩⟩
 #align submonoid.le_prod_iff Submonoid.le_prod_iff
 #align add_submonoid.le_prod_iff AddSubmonoid.le_prod_iff
+-/
 
+#print Submonoid.prod_le_iff /-
 @[to_additive prod_le_iff]
 theorem prod_le_iff {s : Submonoid M} {t : Submonoid N} {u : Submonoid (M × N)} :
     s.Prod t ≤ u ↔ s.map (inl M N) ≤ u ∧ t.map (inr M N) ≤ u :=
@@ -1039,6 +1208,7 @@ theorem prod_le_iff {s : Submonoid M} {t : Submonoid N} {u : Submonoid (M × N)}
     simpa using Submonoid.mul_mem _ h1' h2'
 #align submonoid.prod_le_iff Submonoid.prod_le_iff
 #align add_submonoid.prod_le_iff AddSubmonoid.prod_le_iff
+-/
 
 end Submonoid
 
@@ -1080,8 +1250,6 @@ def mrange (f : M →* N) : submonoid N :=
 -/
 
 
-include mc
-
 #print MonoidHom.mrange /-
 /-- The range of a monoid homomorphism is a submonoid. See Note [range copy pattern]. -/
 @[to_additive "The range of an `add_monoid_hom` is an `add_submonoid`."]
@@ -1091,40 +1259,47 @@ def mrange (f : F) : Submonoid N :=
 #align add_monoid_hom.mrange AddMonoidHom.mrange
 -/
 
+#print MonoidHom.coe_mrange /-
 @[simp, to_additive]
 theorem coe_mrange (f : F) : (mrange f : Set N) = Set.range f :=
   rfl
 #align monoid_hom.coe_mrange MonoidHom.coe_mrange
 #align add_monoid_hom.coe_mrange AddMonoidHom.coe_mrange
+-/
 
+#print MonoidHom.mem_mrange /-
 @[simp, to_additive]
 theorem mem_mrange {f : F} {y : N} : y ∈ mrange f ↔ ∃ x, f x = y :=
   Iff.rfl
 #align monoid_hom.mem_mrange MonoidHom.mem_mrange
 #align add_monoid_hom.mem_mrange AddMonoidHom.mem_mrange
+-/
 
+#print MonoidHom.mrange_eq_map /-
 @[to_additive]
 theorem mrange_eq_map (f : F) : mrange f = (⊤ : Submonoid M).map f :=
   Submonoid.copy_eq _
 #align monoid_hom.mrange_eq_map MonoidHom.mrange_eq_map
 #align add_monoid_hom.mrange_eq_map AddMonoidHom.mrange_eq_map
+-/
 
-omit mc
-
+#print MonoidHom.map_mrange /-
 @[to_additive]
 theorem map_mrange (g : N →* P) (f : M →* N) : f.mrange.map g = (g.comp f).mrange := by
   simpa only [mrange_eq_map] using (⊤ : Submonoid M).map_map g f
 #align monoid_hom.map_mrange MonoidHom.map_mrange
 #align add_monoid_hom.map_mrange AddMonoidHom.map_mrange
+-/
 
-include mc
-
+#print MonoidHom.mrange_top_iff_surjective /-
 @[to_additive]
 theorem mrange_top_iff_surjective {f : F} : mrange f = (⊤ : Submonoid N) ↔ Function.Surjective f :=
   SetLike.ext'_iff.trans <| Iff.trans (by rw [coe_mrange, coe_top]) Set.range_iff_surjective
 #align monoid_hom.mrange_top_iff_surjective MonoidHom.mrange_top_iff_surjective
 #align add_monoid_hom.mrange_top_iff_surjective AddMonoidHom.mrange_top_iff_surjective
+-/
 
+#print MonoidHom.mrange_top_of_surjective /-
 /-- The range of a surjective monoid hom is the whole of the codomain. -/
 @[to_additive "The range of a surjective `add_monoid` hom is the whole of the codomain."]
 theorem mrange_top_of_surjective (f : F) (hf : Function.Surjective f) :
@@ -1132,13 +1307,17 @@ theorem mrange_top_of_surjective (f : F) (hf : Function.Surjective f) :
   mrange_top_iff_surjective.2 hf
 #align monoid_hom.mrange_top_of_surjective MonoidHom.mrange_top_of_surjective
 #align add_monoid_hom.mrange_top_of_surjective AddMonoidHom.mrange_top_of_surjective
+-/
 
+#print MonoidHom.mclosure_preimage_le /-
 @[to_additive]
 theorem mclosure_preimage_le (f : F) (s : Set N) : closure (f ⁻¹' s) ≤ (closure s).comap f :=
   closure_le.2 fun x hx => SetLike.mem_coe.2 <| mem_comap.2 <| subset_closure hx
 #align monoid_hom.mclosure_preimage_le MonoidHom.mclosure_preimage_le
 #align add_monoid_hom.mclosure_preimage_le AddMonoidHom.mclosure_preimage_le
+-/
 
+#print MonoidHom.map_mclosure /-
 /-- The image under a monoid hom of the submonoid generated by a set equals the submonoid generated
     by the image of the set. -/
 @[to_additive
@@ -1150,8 +1329,7 @@ theorem map_mclosure (f : F) (s : Set M) : (closure s).map f = closure (f '' s)
     (closure_le.2 <| Set.image_subset _ subset_closure)
 #align monoid_hom.map_mclosure MonoidHom.map_mclosure
 #align add_monoid_hom.map_mclosure AddMonoidHom.map_mclosure
-
-omit mc
+-/
 
 #print MonoidHom.restrict /-
 /-- Restriction of a monoid hom to a submonoid of the domain. -/
@@ -1163,20 +1341,25 @@ def restrict {N S : Type _} [MulOneClass N] [SetLike S M] [SubmonoidClass S M] (
 #align add_monoid_hom.restrict AddMonoidHom.restrict
 -/
 
+#print MonoidHom.restrict_apply /-
 @[simp, to_additive]
 theorem restrict_apply {N S : Type _} [MulOneClass N] [SetLike S M] [SubmonoidClass S M]
     (f : M →* N) (s : S) (x : s) : f.restrict s x = f x :=
   rfl
 #align monoid_hom.restrict_apply MonoidHom.restrict_apply
 #align add_monoid_hom.restrict_apply AddMonoidHom.restrict_apply
+-/
 
+#print MonoidHom.restrict_mrange /-
 @[simp, to_additive]
 theorem restrict_mrange (f : M →* N) : (f.restrict S).mrange = S.map f := by
   simp_rw [SetLike.ext_iff, mem_mrange, mem_map, restrict_apply, SetLike.exists, Subtype.coe_mk,
     iff_self_iff, forall_const]
 #align monoid_hom.restrict_mrange MonoidHom.restrict_mrange
 #align add_monoid_hom.restrict_mrange AddMonoidHom.restrict_mrange
+-/
 
+#print MonoidHom.codRestrict /-
 /-- Restriction of a monoid hom to a submonoid of the codomain. -/
 @[to_additive "Restriction of an `add_monoid` hom to an `add_submonoid` of the codomain.",
   simps apply]
@@ -1187,28 +1370,33 @@ def codRestrict {S} [SetLike S N] [SubmonoidClass S N] (f : M →* N) (s : S) (h
   map_mul' x y := Subtype.eq (f.map_mul x y)
 #align monoid_hom.cod_restrict MonoidHom.codRestrict
 #align add_monoid_hom.cod_restrict AddMonoidHom.codRestrict
+-/
 
+#print MonoidHom.mrangeRestrict /-
 /-- Restriction of a monoid hom to its range interpreted as a submonoid. -/
 @[to_additive "Restriction of an `add_monoid` hom to its range interpreted as a submonoid."]
 def mrangeRestrict {N} [MulOneClass N] (f : M →* N) : M →* f.mrange :=
   f.codRestrict f.mrange fun x => ⟨x, rfl⟩
 #align monoid_hom.mrange_restrict MonoidHom.mrangeRestrict
 #align add_monoid_hom.mrange_restrict AddMonoidHom.mrangeRestrict
+-/
 
+#print MonoidHom.coe_mrangeRestrict /-
 @[simp, to_additive]
 theorem coe_mrangeRestrict {N} [MulOneClass N] (f : M →* N) (x : M) :
     (f.mrangeRestrict x : N) = f x :=
   rfl
 #align monoid_hom.coe_mrange_restrict MonoidHom.coe_mrangeRestrict
 #align add_monoid_hom.coe_mrange_restrict AddMonoidHom.coe_mrangeRestrict
+-/
 
+#print MonoidHom.mrangeRestrict_surjective /-
 @[to_additive]
 theorem mrangeRestrict_surjective (f : M →* N) : Function.Surjective f.mrangeRestrict :=
   fun ⟨_, ⟨x, rfl⟩⟩ => ⟨x, rfl⟩
 #align monoid_hom.mrange_restrict_surjective MonoidHom.mrangeRestrict_surjective
 #align add_monoid_hom.mrange_restrict_surjective AddMonoidHom.mrangeRestrict_surjective
-
-include mc
+-/
 
 #print MonoidHom.mker /-
 /-- The multiplicative kernel of a monoid homomorphism is the submonoid of elements `x : G` such
@@ -1221,48 +1409,55 @@ def mker (f : F) : Submonoid M :=
 #align add_monoid_hom.mker AddMonoidHom.mker
 -/
 
+#print MonoidHom.mem_mker /-
 @[to_additive]
 theorem mem_mker (f : F) {x : M} : x ∈ mker f ↔ f x = 1 :=
   Iff.rfl
 #align monoid_hom.mem_mker MonoidHom.mem_mker
 #align add_monoid_hom.mem_mker AddMonoidHom.mem_mker
+-/
 
+#print MonoidHom.coe_mker /-
 @[to_additive]
 theorem coe_mker (f : F) : (mker f : Set M) = (f : M → N) ⁻¹' {1} :=
   rfl
 #align monoid_hom.coe_mker MonoidHom.coe_mker
 #align add_monoid_hom.coe_mker AddMonoidHom.coe_mker
+-/
 
+#print MonoidHom.decidableMemMker /-
 @[to_additive]
 instance decidableMemMker [DecidableEq N] (f : F) : DecidablePred (· ∈ mker f) := fun x =>
   decidable_of_iff (f x = 1) (mem_mker f)
 #align monoid_hom.decidable_mem_mker MonoidHom.decidableMemMker
 #align add_monoid_hom.decidable_mem_mker AddMonoidHom.decidableMemMker
+-/
 
-omit mc
-
+#print MonoidHom.comap_mker /-
 @[to_additive]
 theorem comap_mker (g : N →* P) (f : M →* N) : g.mker.comap f = (g.comp f).mker :=
   rfl
 #align monoid_hom.comap_mker MonoidHom.comap_mker
 #align add_monoid_hom.comap_mker AddMonoidHom.comap_mker
+-/
 
-include mc
-
+#print MonoidHom.comap_bot' /-
 @[simp, to_additive]
 theorem comap_bot' (f : F) : (⊥ : Submonoid N).comap f = mker f :=
   rfl
 #align monoid_hom.comap_bot' MonoidHom.comap_bot'
 #align add_monoid_hom.comap_bot' AddMonoidHom.comap_bot'
+-/
 
-omit mc
-
+#print MonoidHom.restrict_mker /-
 @[simp, to_additive]
 theorem restrict_mker (f : M →* N) : (f.restrict S).mker = f.mker.comap S.Subtype :=
   rfl
 #align monoid_hom.restrict_mker MonoidHom.restrict_mker
 #align add_monoid_hom.restrict_mker AddMonoidHom.restrict_mker
+-/
 
+#print MonoidHom.mrangeRestrict_mker /-
 @[to_additive]
 theorem mrangeRestrict_mker (f : M →* N) : mker (mrangeRestrict f) = mker f :=
   by
@@ -1271,12 +1466,16 @@ theorem mrangeRestrict_mker (f : M →* N) : mker (mrangeRestrict f) = mker f :=
   simp only
 #align monoid_hom.range_restrict_mker MonoidHom.mrangeRestrict_mker
 #align add_monoid_hom.range_restrict_mker AddMonoidHom.mrangeRestrict_mker
+-/
 
+#print MonoidHom.mker_one /-
 @[simp, to_additive]
 theorem mker_one : (1 : M →* N).mker = ⊤ := by ext; simp [mem_mker]
 #align monoid_hom.mker_one MonoidHom.mker_one
 #align add_monoid_hom.mker_zero AddMonoidHom.mker_zero
+-/
 
+#print MonoidHom.prod_map_comap_prod' /-
 @[to_additive]
 theorem prod_map_comap_prod' {M' : Type _} {N' : Type _} [MulOneClass M'] [MulOneClass N']
     (f : M →* N) (g : M' →* N') (S : Submonoid N) (S' : Submonoid N') :
@@ -1284,24 +1483,32 @@ theorem prod_map_comap_prod' {M' : Type _} {N' : Type _} [MulOneClass M'] [MulOn
   SetLike.coe_injective <| Set.preimage_prod_map_prod f g _ _
 #align monoid_hom.prod_map_comap_prod' MonoidHom.prod_map_comap_prod'
 #align add_monoid_hom.sum_map_comap_sum' AddMonoidHom.prod_map_comap_prod'
+-/
 
+#print MonoidHom.mker_prod_map /-
 @[to_additive]
 theorem mker_prod_map {M' : Type _} {N' : Type _} [MulOneClass M'] [MulOneClass N'] (f : M →* N)
     (g : M' →* N') : (prodMap f g).mker = f.mker.Prod g.mker := by
   rw [← comap_bot', ← comap_bot', ← comap_bot', ← prod_map_comap_prod', bot_prod_bot]
 #align monoid_hom.mker_prod_map MonoidHom.mker_prod_map
 #align add_monoid_hom.mker_sum_map AddMonoidHom.mker_prod_map
+-/
 
+#print MonoidHom.mker_inl /-
 @[simp, to_additive]
 theorem mker_inl : (inl M N).mker = ⊥ := by ext x; simp [mem_mker]
 #align monoid_hom.mker_inl MonoidHom.mker_inl
 #align add_monoid_hom.mker_inl AddMonoidHom.mker_inl
+-/
 
+#print MonoidHom.mker_inr /-
 @[simp, to_additive]
 theorem mker_inr : (inr M N).mker = ⊥ := by ext x; simp [mem_mker]
 #align monoid_hom.mker_inr MonoidHom.mker_inr
 #align add_monoid_hom.mker_inr AddMonoidHom.mker_inr
+-/
 
+#print MonoidHom.submonoidComap /-
 /-- The `monoid_hom` from the preimage of a submonoid to itself. -/
 @[to_additive "the `add_monoid_hom` from the preimage of an additive submonoid to itself.", simps]
 def submonoidComap (f : M →* N) (N' : Submonoid N) : N'.comap f →* N'
@@ -1311,7 +1518,9 @@ def submonoidComap (f : M →* N) (N' : Submonoid N) : N'.comap f →* N'
   map_mul' x y := Subtype.eq (f.map_mul x y)
 #align monoid_hom.submonoid_comap MonoidHom.submonoidComap
 #align add_monoid_hom.add_submonoid_comap AddMonoidHom.addSubmonoidComap
+-/
 
+#print MonoidHom.submonoidMap /-
 /-- The `monoid_hom` from a submonoid to its image.
 See `mul_equiv.submonoid_map` for a variant for `mul_equiv`s. -/
 @[to_additive
@@ -1324,12 +1533,15 @@ def submonoidMap (f : M →* N) (M' : Submonoid M) : M' →* M'.map f
   map_mul' x y := Subtype.eq <| f.map_mul x y
 #align monoid_hom.submonoid_map MonoidHom.submonoidMap
 #align add_monoid_hom.add_submonoid_map AddMonoidHom.addSubmonoidMap
+-/
 
+#print MonoidHom.submonoidMap_surjective /-
 @[to_additive]
 theorem submonoidMap_surjective (f : M →* N) (M' : Submonoid M) :
     Function.Surjective (f.submonoidMap M') := by rintro ⟨_, x, hx, rfl⟩; exact ⟨⟨x, hx⟩, rfl⟩
 #align monoid_hom.submonoid_map_surjective MonoidHom.submonoidMap_surjective
 #align add_monoid_hom.add_submonoid_map_surjective AddMonoidHom.addSubmonoidMap_surjective
+-/
 
 end MonoidHom
 
@@ -1337,84 +1549,111 @@ namespace Submonoid
 
 open MonoidHom
 
+#print Submonoid.mrange_inl /-
 @[to_additive]
 theorem mrange_inl : (inl M N).mrange = prod ⊤ ⊥ := by simpa only [mrange_eq_map] using map_inl ⊤
 #align submonoid.mrange_inl Submonoid.mrange_inl
 #align add_submonoid.mrange_inl AddSubmonoid.mrange_inl
+-/
 
+#print Submonoid.mrange_inr /-
 @[to_additive]
 theorem mrange_inr : (inr M N).mrange = prod ⊥ ⊤ := by simpa only [mrange_eq_map] using map_inr ⊤
 #align submonoid.mrange_inr Submonoid.mrange_inr
 #align add_submonoid.mrange_inr AddSubmonoid.mrange_inr
+-/
 
+#print Submonoid.mrange_inl' /-
 @[to_additive]
 theorem mrange_inl' : (inl M N).mrange = comap (snd M N) ⊥ :=
   mrange_inl.trans (top_prod _)
 #align submonoid.mrange_inl' Submonoid.mrange_inl'
 #align add_submonoid.mrange_inl' AddSubmonoid.mrange_inl'
+-/
 
+#print Submonoid.mrange_inr' /-
 @[to_additive]
 theorem mrange_inr' : (inr M N).mrange = comap (fst M N) ⊥ :=
   mrange_inr.trans (prod_top _)
 #align submonoid.mrange_inr' Submonoid.mrange_inr'
 #align add_submonoid.mrange_inr' AddSubmonoid.mrange_inr'
+-/
 
+#print Submonoid.mrange_fst /-
 @[simp, to_additive]
 theorem mrange_fst : (fst M N).mrange = ⊤ :=
   mrange_top_of_surjective (fst M N) <| @Prod.fst_surjective _ _ ⟨1⟩
 #align submonoid.mrange_fst Submonoid.mrange_fst
 #align add_submonoid.mrange_fst AddSubmonoid.mrange_fst
+-/
 
+#print Submonoid.mrange_snd /-
 @[simp, to_additive]
 theorem mrange_snd : (snd M N).mrange = ⊤ :=
   mrange_top_of_surjective (snd M N) <| @Prod.snd_surjective _ _ ⟨1⟩
 #align submonoid.mrange_snd Submonoid.mrange_snd
 #align add_submonoid.mrange_snd AddSubmonoid.mrange_snd
+-/
 
+#print Submonoid.prod_eq_bot_iff /-
 @[to_additive]
 theorem prod_eq_bot_iff {s : Submonoid M} {t : Submonoid N} : s.Prod t = ⊥ ↔ s = ⊥ ∧ t = ⊥ := by
   simp only [eq_bot_iff, prod_le_iff, (gc_map_comap _).le_iff_le, comap_bot', mker_inl, mker_inr]
 #align submonoid.prod_eq_bot_iff Submonoid.prod_eq_bot_iff
 #align add_submonoid.sum_eq_bot_iff AddSubmonoid.prod_eq_bot_iff
+-/
 
+#print Submonoid.prod_eq_top_iff /-
 @[to_additive]
 theorem prod_eq_top_iff {s : Submonoid M} {t : Submonoid N} : s.Prod t = ⊤ ↔ s = ⊤ ∧ t = ⊤ := by
   simp only [eq_top_iff, le_prod_iff, ← (gc_map_comap _).le_iff_le, ← mrange_eq_map, mrange_fst,
     mrange_snd]
 #align submonoid.prod_eq_top_iff Submonoid.prod_eq_top_iff
 #align add_submonoid.sum_eq_top_iff AddSubmonoid.prod_eq_top_iff
+-/
 
+#print Submonoid.mrange_inl_sup_mrange_inr /-
 @[simp, to_additive]
 theorem mrange_inl_sup_mrange_inr : (inl M N).mrange ⊔ (inr M N).mrange = ⊤ := by
   simp only [mrange_inl, mrange_inr, prod_bot_sup_bot_prod, top_prod_top]
 #align submonoid.mrange_inl_sup_mrange_inr Submonoid.mrange_inl_sup_mrange_inr
 #align add_submonoid.mrange_inl_sup_mrange_inr AddSubmonoid.mrange_inl_sup_mrange_inr
+-/
 
+#print Submonoid.inclusion /-
 /-- The monoid hom associated to an inclusion of submonoids. -/
 @[to_additive "The `add_monoid` hom associated to an inclusion of submonoids."]
 def inclusion {S T : Submonoid M} (h : S ≤ T) : S →* T :=
   S.Subtype.codRestrict _ fun x => h x.2
 #align submonoid.inclusion Submonoid.inclusion
 #align add_submonoid.inclusion AddSubmonoid.inclusion
+-/
 
+#print Submonoid.range_subtype /-
 @[simp, to_additive]
 theorem range_subtype (s : Submonoid M) : s.Subtype.mrange = s :=
   SetLike.coe_injective <| (coe_mrange _).trans <| Subtype.range_coe
 #align submonoid.range_subtype Submonoid.range_subtype
 #align add_submonoid.range_subtype AddSubmonoid.range_subtype
+-/
 
+#print Submonoid.eq_top_iff' /-
 @[to_additive]
 theorem eq_top_iff' : S = ⊤ ↔ ∀ x : M, x ∈ S :=
   eq_top_iff.trans ⟨fun h m => h <| mem_top m, fun h m _ => h m⟩
 #align submonoid.eq_top_iff' Submonoid.eq_top_iff'
 #align add_submonoid.eq_top_iff' AddSubmonoid.eq_top_iff'
+-/
 
+#print Submonoid.eq_bot_iff_forall /-
 @[to_additive]
 theorem eq_bot_iff_forall : S = ⊥ ↔ ∀ x ∈ S, x = (1 : M) :=
   SetLike.ext_iff.trans <| by simp (config := { contextual := true }) [iff_def, S.one_mem]
 #align submonoid.eq_bot_iff_forall Submonoid.eq_bot_iff_forall
 #align add_submonoid.eq_bot_iff_forall AddSubmonoid.eq_bot_iff_forall
+-/
 
+#print Submonoid.nontrivial_iff_exists_ne_one /-
 @[to_additive]
 theorem nontrivial_iff_exists_ne_one (S : Submonoid M) : Nontrivial S ↔ ∃ x ∈ S, x ≠ (1 : M) :=
   calc
@@ -1423,14 +1662,18 @@ theorem nontrivial_iff_exists_ne_one (S : Submonoid M) : Nontrivial S ↔ ∃ x
     _ ↔ ∃ x ∈ S, x ≠ (1 : M) := by simp only [Ne.def]
 #align submonoid.nontrivial_iff_exists_ne_one Submonoid.nontrivial_iff_exists_ne_one
 #align add_submonoid.nontrivial_iff_exists_ne_zero AddSubmonoid.nontrivial_iff_exists_ne_zero
+-/
 
+#print Submonoid.bot_or_nontrivial /-
 /-- A submonoid is either the trivial submonoid or nontrivial. -/
 @[to_additive "An additive submonoid is either the trivial additive submonoid or nontrivial."]
 theorem bot_or_nontrivial (S : Submonoid M) : S = ⊥ ∨ Nontrivial S := by
   simp only [eq_bot_iff_forall, nontrivial_iff_exists_ne_one, ← not_forall, Classical.em]
 #align submonoid.bot_or_nontrivial Submonoid.bot_or_nontrivial
 #align add_submonoid.bot_or_nontrivial AddSubmonoid.bot_or_nontrivial
+-/
 
+#print Submonoid.bot_or_exists_ne_one /-
 /-- A submonoid is either the trivial submonoid or contains a nonzero element. -/
 @[to_additive
       "An additive submonoid is either the trivial additive submonoid or contains a nonzero\nelement."]
@@ -1438,6 +1681,7 @@ theorem bot_or_exists_ne_one (S : Submonoid M) : S = ⊥ ∨ ∃ x ∈ S, x ≠
   S.bot_or_nontrivial.imp_right S.nontrivial_iff_exists_ne_one.mp
 #align submonoid.bot_or_exists_ne_one Submonoid.bot_or_exists_ne_one
 #align add_submonoid.bot_or_exists_ne_zero AddSubmonoid.bot_or_exists_ne_zero
+-/
 
 end Submonoid
 
@@ -1445,6 +1689,7 @@ namespace MulEquiv
 
 variable {S} {T : Submonoid M}
 
+#print MulEquiv.submonoidCongr /-
 /-- Makes the identity isomorphism from a proof that two submonoids of a multiplicative
     monoid are equal. -/
 @[to_additive
@@ -1453,7 +1698,9 @@ def submonoidCongr (h : S = T) : S ≃* T :=
   { Equiv.setCongr <| congr_arg _ h with map_mul' := fun _ _ => rfl }
 #align mul_equiv.submonoid_congr MulEquiv.submonoidCongr
 #align add_equiv.add_submonoid_congr AddEquiv.addSubmonoidCongr
+-/
 
+#print MulEquiv.ofLeftInverse' /-
 -- this name is primed so that the version to `f.range` instead of `f.mrange` can be unprimed.
 /-- A monoid homomorphism `f : M →* N` with a left-inverse `g : N → M` defines a multiplicative
 equivalence between `M` and `f.mrange`.
@@ -1473,7 +1720,9 @@ def ofLeftInverse' (f : M →* N) {g : N → M} (h : Function.LeftInverse g f) :
         show f (g x) = x by rw [← hx', h x'] }
 #align mul_equiv.of_left_inverse' MulEquiv.ofLeftInverse'
 #align add_equiv.of_left_inverse' AddEquiv.ofLeftInverse'
+-/
 
+#print MulEquiv.submonoidMap /-
 /-- A `mul_equiv` `φ` between two monoids `M` and `N` induces a `mul_equiv` between
 a submonoid `S ≤ M` and the submonoid `φ(S) ≤ N`.
 See `monoid_hom.submonoid_map` for a variant for `monoid_hom`s. -/
@@ -1483,28 +1732,35 @@ def submonoidMap (e : M ≃* N) (S : Submonoid M) : S ≃* S.map e.toMonoidHom :
   { (e : M ≃ N).image S with map_mul' := fun _ _ => Subtype.ext (map_mul e _ _) }
 #align mul_equiv.submonoid_map MulEquiv.submonoidMap
 #align add_equiv.add_submonoid_map AddEquiv.addSubmonoidMap
+-/
 
+#print MulEquiv.coe_submonoidMap_apply /-
 @[simp, to_additive]
 theorem coe_submonoidMap_apply (e : M ≃* N) (S : Submonoid M) (g : S) :
     ((submonoidMap e S g : S.map (e : M →* N)) : N) = e g :=
   rfl
 #align mul_equiv.coe_submonoid_map_apply MulEquiv.coe_submonoidMap_apply
 #align add_equiv.coe_add_submonoid_map_apply AddEquiv.coe_addSubmonoidMap_apply
+-/
 
+#print MulEquiv.submonoidMap_symm_apply /-
 @[simp, to_additive AddEquiv.add_submonoid_map_symm_apply]
 theorem submonoidMap_symm_apply (e : M ≃* N) (S : Submonoid M) (g : S.map (e : M →* N)) :
     (e.submonoidMap S).symm g = ⟨e.symm g, SetLike.mem_coe.1 <| Set.mem_image_equiv.1 g.2⟩ :=
   rfl
 #align mul_equiv.submonoid_map_symm_apply MulEquiv.submonoidMap_symm_apply
 #align add_equiv.add_submonoid_map_symm_apply AddEquiv.add_submonoid_map_symm_apply
+-/
 
 end MulEquiv
 
+#print Submonoid.equivMapOfInjective_coe_mulEquiv /-
 @[simp, to_additive]
 theorem Submonoid.equivMapOfInjective_coe_mulEquiv (e : M ≃* N) :
     S.equivMapOfInjective (e : M →* N) (EquivLike.injective e) = e.submonoidMap S := by ext; rfl
 #align submonoid.equiv_map_of_injective_coe_mul_equiv Submonoid.equivMapOfInjective_coe_mulEquiv
 #align add_submonoid.equiv_map_of_injective_coe_add_equiv AddSubmonoid.equivMapOfInjective_coe_addEquiv
+-/
 
 section Actions
 
@@ -1530,30 +1786,36 @@ variable [MulOneClass M']
 instance [SMul M' α] (S : Submonoid M') : SMul S α :=
   SMul.comp _ S.Subtype
 
+#print Submonoid.smulCommClass_left /-
 @[to_additive]
 instance smulCommClass_left [SMul M' β] [SMul α β] [SMulCommClass M' α β] (S : Submonoid M') :
     SMulCommClass S α β :=
   ⟨fun a => (smul_comm (a : M') : _)⟩
 #align submonoid.smul_comm_class_left Submonoid.smulCommClass_left
 #align add_submonoid.vadd_comm_class_left AddSubmonoid.vaddCommClass_left
+-/
 
+#print Submonoid.smulCommClass_right /-
 @[to_additive]
 instance smulCommClass_right [SMul α β] [SMul M' β] [SMulCommClass α M' β] (S : Submonoid M') :
     SMulCommClass α S β :=
   ⟨fun a s => (smul_comm a (s : M') : _)⟩
 #align submonoid.smul_comm_class_right Submonoid.smulCommClass_right
 #align add_submonoid.vadd_comm_class_right AddSubmonoid.vaddCommClass_right
+-/
 
 /-- Note that this provides `is_scalar_tower S M' M'` which is needed by `smul_mul_assoc`. -/
 instance [SMul α β] [SMul M' α] [SMul M' β] [IsScalarTower M' α β] (S : Submonoid M') :
     IsScalarTower S α β :=
   ⟨fun a => (smul_assoc (a : M') : _)⟩
 
+#print Submonoid.smul_def /-
 @[to_additive]
 theorem smul_def [SMul M' α] {S : Submonoid M'} (g : S) (m : α) : g • m = (g : M') • m :=
   rfl
 #align submonoid.smul_def Submonoid.smul_def
 #align add_submonoid.vadd_def AddSubmonoid.vadd_def
+-/
 
 instance [SMul M' α] [FaithfulSMul M' α] (S : Submonoid M') : FaithfulSMul S α :=
   ⟨fun x y h => Subtype.ext <| eq_of_smul_eq_smul h⟩
Diff
@@ -1421,7 +1421,6 @@ theorem nontrivial_iff_exists_ne_one (S : Submonoid M) : Nontrivial S ↔ ∃ x
     Nontrivial S ↔ ∃ x : S, x ≠ 1 := nontrivial_iff_exists_ne 1
     _ ↔ ∃ (x : _) (hx : x ∈ S), (⟨x, hx⟩ : S) ≠ ⟨1, S.one_mem⟩ := Subtype.exists
     _ ↔ ∃ x ∈ S, x ≠ (1 : M) := by simp only [Ne.def]
-    
 #align submonoid.nontrivial_iff_exists_ne_one Submonoid.nontrivial_iff_exists_ne_one
 #align add_submonoid.nontrivial_iff_exists_ne_zero AddSubmonoid.nontrivial_iff_exists_ne_zero
 
Diff
@@ -1419,7 +1419,7 @@ theorem eq_bot_iff_forall : S = ⊥ ↔ ∀ x ∈ S, x = (1 : M) :=
 theorem nontrivial_iff_exists_ne_one (S : Submonoid M) : Nontrivial S ↔ ∃ x ∈ S, x ≠ (1 : M) :=
   calc
     Nontrivial S ↔ ∃ x : S, x ≠ 1 := nontrivial_iff_exists_ne 1
-    _ ↔ ∃ (x : _)(hx : x ∈ S), (⟨x, hx⟩ : S) ≠ ⟨1, S.one_mem⟩ := Subtype.exists
+    _ ↔ ∃ (x : _) (hx : x ∈ S), (⟨x, hx⟩ : S) ≠ ⟨1, S.one_mem⟩ := Subtype.exists
     _ ↔ ∃ x ∈ S, x ≠ (1 : M) := by simp only [Ne.def]
     
 #align submonoid.nontrivial_iff_exists_ne_one Submonoid.nontrivial_iff_exists_ne_one
Diff
@@ -773,13 +773,12 @@ protected theorem pow_mem {M : Type _} [Monoid M] (S : Submonoid M) {x : M} (hx
 #align submonoid.pow_mem Submonoid.pow_mem
 #align add_submonoid.nsmul_mem AddSubmonoid.nsmul_mem
 
-/- warning: submonoid.coe_pow clashes with [anonymous] -> [anonymous]
-Case conversion may be inaccurate. Consider using '#align submonoid.coe_pow [anonymous]ₓ'. -/
 @[simp, norm_cast, to_additive]
-theorem [anonymous] {M : Type _} [Monoid M] {S : Submonoid M} (x : S) (n : ℕ) :
+theorem coe_pow {M : Type _} [Monoid M] {S : Submonoid M} (x : S) (n : ℕ) :
     ↑(x ^ n) = (x ^ n : M) :=
   rfl
-#align submonoid.coe_pow [anonymous]
+#align submonoid.coe_pow Submonoid.coe_pow
+#align add_submonoid.coe_nsmul AddSubmonoid.coe_nsmul
 
 /-- A submonoid of a monoid inherits a monoid structure. -/
 @[to_additive "An `add_submonoid` of an `add_monoid` inherits an `add_monoid`\nstructure."]
Diff
@@ -80,12 +80,6 @@ variable {M N P : Type _} [MulOneClass M] [MulOneClass N] [MulOneClass P] (S : S
 
 section
 
-/- warning: submonoid.to_add_submonoid -> Submonoid.toAddSubmonoid is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M], OrderIso.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M], OrderIso.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))))))
-Case conversion may be inaccurate. Consider using '#align submonoid.to_add_submonoid Submonoid.toAddSubmonoidₓ'. -/
 /-- Submonoids of monoid `M` are isomorphic to additive submonoids of `additive M`. -/
 @[simps]
 def Submonoid.toAddSubmonoid : Submonoid M ≃o AddSubmonoid (Additive M)
@@ -103,20 +97,11 @@ def Submonoid.toAddSubmonoid : Submonoid M ≃o AddSubmonoid (Additive M)
   map_rel_iff' a b := Iff.rfl
 #align submonoid.to_add_submonoid Submonoid.toAddSubmonoid
 
-/- warning: add_submonoid.to_submonoid' -> AddSubmonoid.toSubmonoid' is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M], OrderIso.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))))) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M], OrderIso.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1)))))
-Case conversion may be inaccurate. Consider using '#align add_submonoid.to_submonoid' AddSubmonoid.toSubmonoid'ₓ'. -/
 /-- Additive submonoids of an additive monoid `additive M` are isomorphic to submonoids of `M`. -/
 abbrev AddSubmonoid.toSubmonoid' : AddSubmonoid (Additive M) ≃o Submonoid M :=
   Submonoid.toAddSubmonoid.symm
 #align add_submonoid.to_submonoid' AddSubmonoid.toSubmonoid'
 
-/- warning: submonoid.to_add_submonoid_closure -> Submonoid.toAddSubmonoid_closure is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align submonoid.to_add_submonoid_closure Submonoid.toAddSubmonoid_closureₓ'. -/
 theorem Submonoid.toAddSubmonoid_closure (S : Set M) :
     (Submonoid.closure S).toAddSubmonoid = AddSubmonoid.closure (Additive.toMul ⁻¹' S) :=
   le_antisymm
@@ -124,9 +109,6 @@ theorem Submonoid.toAddSubmonoid_closure (S : Set M) :
     (AddSubmonoid.closure_le.2 Submonoid.subset_closure)
 #align submonoid.to_add_submonoid_closure Submonoid.toAddSubmonoid_closure
 
-/- warning: add_submonoid.to_submonoid'_closure -> AddSubmonoid.toSubmonoid'_closure is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align add_submonoid.to_submonoid'_closure AddSubmonoid.toSubmonoid'_closureₓ'. -/
 theorem AddSubmonoid.toSubmonoid'_closure (S : Set (Additive M)) :
     (AddSubmonoid.closure S).toSubmonoid' = Submonoid.closure (Multiplicative.ofAdd ⁻¹' S) :=
   le_antisymm
@@ -141,12 +123,6 @@ section
 
 variable {A : Type _} [AddZeroClass A]
 
-/- warning: add_submonoid.to_submonoid -> AddSubmonoid.toSubmonoid is a dubious translation:
-lean 3 declaration is
-  forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A], OrderIso.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4)))) (Preorder.toHasLe.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))
-but is expected to have type
-  forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A], OrderIso.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))))))
-Case conversion may be inaccurate. Consider using '#align add_submonoid.to_submonoid AddSubmonoid.toSubmonoidₓ'. -/
 /-- Additive submonoids of an additive monoid `A` are isomorphic to
 multiplicative submonoids of `multiplicative A`. -/
 @[simps]
@@ -165,20 +141,11 @@ def AddSubmonoid.toSubmonoid : AddSubmonoid A ≃o Submonoid (Multiplicative A)
   map_rel_iff' a b := Iff.rfl
 #align add_submonoid.to_submonoid AddSubmonoid.toSubmonoid
 
-/- warning: submonoid.to_add_submonoid' -> Submonoid.toAddSubmonoid' is a dubious translation:
-lean 3 declaration is
-  forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A], OrderIso.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (Preorder.toHasLe.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))))) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4))))
-but is expected to have type
-  forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A], OrderIso.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4)))))
-Case conversion may be inaccurate. Consider using '#align submonoid.to_add_submonoid' Submonoid.toAddSubmonoid'ₓ'. -/
 /-- Submonoids of a monoid `multiplicative A` are isomorphic to additive submonoids of `A`. -/
 abbrev Submonoid.toAddSubmonoid' : Submonoid (Multiplicative A) ≃o AddSubmonoid A :=
   AddSubmonoid.toSubmonoid.symm
 #align submonoid.to_add_submonoid' Submonoid.toAddSubmonoid'
 
-/- warning: add_submonoid.to_submonoid_closure -> AddSubmonoid.toSubmonoid_closure is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align add_submonoid.to_submonoid_closure AddSubmonoid.toSubmonoid_closureₓ'. -/
 theorem AddSubmonoid.toSubmonoid_closure (S : Set A) :
     (AddSubmonoid.closure S).toSubmonoid = Submonoid.closure (Multiplicative.toAdd ⁻¹' S) :=
   le_antisymm
@@ -187,9 +154,6 @@ theorem AddSubmonoid.toSubmonoid_closure (S : Set A) :
     (Submonoid.closure_le.2 AddSubmonoid.subset_closure)
 #align add_submonoid.to_submonoid_closure AddSubmonoid.toSubmonoid_closure
 
-/- warning: submonoid.to_add_submonoid'_closure -> Submonoid.toAddSubmonoid'_closure is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align submonoid.to_add_submonoid'_closure Submonoid.toAddSubmonoid'_closureₓ'. -/
 theorem Submonoid.toAddSubmonoid'_closure (S : Set (Multiplicative A)) :
     (Submonoid.closure S).toAddSubmonoid' = AddSubmonoid.closure (Additive.ofMul ⁻¹' S) :=
   le_antisymm
@@ -226,24 +190,12 @@ def comap (f : F) (S : Submonoid N) : Submonoid M
 #align add_submonoid.comap AddSubmonoid.comap
 -/
 
-/- warning: submonoid.coe_comap -> Submonoid.coe_comap 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (S : Submonoid.{u2} N _inst_2) (f : F), Eq.{succ u1} (Set.{u1} M) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)) (Set.preimage.{u1, 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) (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 mc))) f) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Submonoid.{u2} N _inst_2) (Set.{u2} N) (HasLiftT.mk.{succ u2, succ u2} (Submonoid.{u2} N _inst_2) (Set.{u2} N) (CoeTCₓ.coe.{succ u2, succ u2} (Submonoid.{u2} N _inst_2) (Set.{u2} N) (SetLike.Set.hasCoeT.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) S))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] (S : Submonoid.{u3} N _inst_2) (f : F), Eq.{succ u2} (Set.{u2} M) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S)) (Set.preimage.{u2, u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f) (SetLike.coe.{u3, u3} (Submonoid.{u3} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u3} N _inst_2) S))
-Case conversion may be inaccurate. Consider using '#align submonoid.coe_comap Submonoid.coe_comapₓ'. -/
 @[simp, to_additive]
 theorem coe_comap (S : Submonoid N) (f : F) : (S.comap f : Set M) = f ⁻¹' S :=
   rfl
 #align submonoid.coe_comap Submonoid.coe_comap
 #align add_submonoid.coe_comap AddSubmonoid.coe_comap
 
-/- warning: submonoid.mem_comap -> Submonoid.mem_comap 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {S : Submonoid.{u2} N _inst_2} {f : F} {x : M}, Iff (Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)) (Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{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 mc))) f x) S)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {S : Submonoid.{u3} N _inst_2} {f : F} {x : M}, Iff (Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S)) (Membership.mem.{u3, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (Submonoid.{u3} N _inst_2) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u3} N _inst_2)) (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f x) S)
-Case conversion may be inaccurate. Consider using '#align submonoid.mem_comap Submonoid.mem_comapₓ'. -/
 @[simp, to_additive]
 theorem mem_comap {S : Submonoid N} {f : F} {x : M} : x ∈ S.comap f ↔ f x ∈ S :=
   Iff.rfl
@@ -285,48 +237,24 @@ def map (f : F) (S : Submonoid M) : Submonoid N
 #align add_submonoid.map AddSubmonoid.map
 -/
 
-/- warning: submonoid.coe_map -> Submonoid.coe_map 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F) (S : Submonoid.{u1} M _inst_1), Eq.{succ u2} (Set.{u2} N) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Submonoid.{u2} N _inst_2) (Set.{u2} N) (HasLiftT.mk.{succ u2, succ u2} (Submonoid.{u2} N _inst_2) (Set.{u2} N) (CoeTCₓ.coe.{succ u2, succ u2} (Submonoid.{u2} N _inst_2) (Set.{u2} N) (SetLike.Set.hasCoeT.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)) (Set.image.{u1, 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) (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 mc))) f) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) (S : Submonoid.{u3} M _inst_1), Eq.{succ u2} (Set.{u2} N) (SetLike.coe.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)) (Set.image.{u3, u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f) (SetLike.coe.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1) S))
-Case conversion may be inaccurate. Consider using '#align submonoid.coe_map Submonoid.coe_mapₓ'. -/
 @[simp, to_additive]
 theorem coe_map (f : F) (S : Submonoid M) : (S.map f : Set N) = f '' S :=
   rfl
 #align submonoid.coe_map Submonoid.coe_map
 #align add_submonoid.coe_map AddSubmonoid.coe_map
 
-/- warning: submonoid.mem_map -> Submonoid.mem_map 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F} {S : Submonoid.{u1} M _inst_1} {y : N}, Iff (Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) y (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)) (Exists.{succ u1} M (fun (x : M) => Exists.{0} (Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S) (fun (H : Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S) => 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 (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 mc))) f x) y)))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F} {S : Submonoid.{u3} M _inst_1} {y : N}, Iff (Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) y (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)) (Exists.{succ u3} M (fun (x : M) => And (Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x S) (Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (MulHomClass.toFunLike.{u1, u3, u2} F M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f x) y)))
-Case conversion may be inaccurate. Consider using '#align submonoid.mem_map Submonoid.mem_mapₓ'. -/
 @[simp, to_additive]
 theorem mem_map {f : F} {S : Submonoid M} {y : N} : y ∈ S.map f ↔ ∃ x ∈ S, f x = y :=
   mem_image_iff_bex
 #align submonoid.mem_map Submonoid.mem_map
 #align add_submonoid.mem_map AddSubmonoid.mem_map
 
-/- warning: submonoid.mem_map_of_mem -> Submonoid.mem_map_of_mem 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F) {S : Submonoid.{u1} M _inst_1} {x : M}, (Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S) -> (Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{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 mc))) f x) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) {S : Submonoid.{u3} M _inst_1} {x : M}, (Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x S) -> (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f x) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S))
-Case conversion may be inaccurate. Consider using '#align submonoid.mem_map_of_mem Submonoid.mem_map_of_memₓ'. -/
 @[to_additive]
 theorem mem_map_of_mem (f : F) {S : Submonoid M} {x : M} (hx : x ∈ S) : f x ∈ S.map f :=
   mem_image_of_mem f hx
 #align submonoid.mem_map_of_mem Submonoid.mem_map_of_mem
 #align add_submonoid.mem_map_of_mem AddSubmonoid.mem_map_of_mem
 
-/- warning: submonoid.apply_coe_mem_map -> Submonoid.apply_coe_mem_map 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F) (S : Submonoid.{u1} M _inst_1) (x : coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S), Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{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 mc))) f ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S))))) x)) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) (S : Submonoid.{u3} M _inst_1) (x : Subtype.{succ u3} M (fun (x : M) => Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x S)), Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (Subtype.val.{succ u3} M (fun (x : M) => Membership.mem.{u3, u3} M (Set.{u3} M) (Set.instMembershipSet.{u3} M) x (SetLike.coe.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1) S)) x)) (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f (Subtype.val.{succ u3} M (fun (x : M) => Membership.mem.{u3, u3} M (Set.{u3} M) (Set.instMembershipSet.{u3} M) x (SetLike.coe.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1) S)) x)) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)
-Case conversion may be inaccurate. Consider using '#align submonoid.apply_coe_mem_map Submonoid.apply_coe_mem_mapₓ'. -/
 @[to_additive]
 theorem apply_coe_mem_map (f : F) (S : Submonoid M) (x : S) : f x ∈ S.map f :=
   mem_map_of_mem f x.Prop
@@ -335,12 +263,6 @@ theorem apply_coe_mem_map (f : F) (S : Submonoid M) (x : S) : f x ∈ S.map f :=
 
 omit mc
 
-/- warning: submonoid.map_map -> Submonoid.map_map 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] (S : Submonoid.{u1} M _inst_1) (g : MonoidHom.{u2, u3} N P _inst_2 _inst_3) (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u3} (Submonoid.{u3} P _inst_3) (Submonoid.map.{u2, u3, max u3 u2} N P _inst_2 _inst_3 (MonoidHom.{u2, u3} N P _inst_2 _inst_3) (MonoidHom.monoidHomClass.{u2, u3} N P _inst_2 _inst_3) g (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) (Submonoid.map.{u1, u3, max u3 u1} M P _inst_1 _inst_3 (MonoidHom.{u1, u3} M P _inst_1 _inst_3) (MonoidHom.monoidHomClass.{u1, u3} M P _inst_1 _inst_3) (MonoidHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f) S)
-but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u3}} {P : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u3} N] [_inst_3 : MulOneClass.{u2} P] (S : Submonoid.{u1} M _inst_1) (g : MonoidHom.{u3, u2} N P _inst_2 _inst_3) (f : MonoidHom.{u1, u3} M N _inst_1 _inst_2), Eq.{succ u2} (Submonoid.{u2} P _inst_3) (Submonoid.map.{u3, u2, max u3 u2} N P _inst_2 _inst_3 (MonoidHom.{u3, u2} N P _inst_2 _inst_3) (MonoidHom.monoidHomClass.{u3, u2} N P _inst_2 _inst_3) g (Submonoid.map.{u1, u3, max u1 u3} M N _inst_1 _inst_2 (MonoidHom.{u1, u3} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u3} M N _inst_1 _inst_2) f S)) (Submonoid.map.{u1, u2, max u2 u1} M P _inst_1 _inst_3 (MonoidHom.{u1, u2} M P _inst_1 _inst_3) (MonoidHom.monoidHomClass.{u1, u2} M P _inst_1 _inst_3) (MonoidHom.comp.{u1, u3, u2} M N P _inst_1 _inst_2 _inst_3 g f) S)
-Case conversion may be inaccurate. Consider using '#align submonoid.map_map Submonoid.map_mapₓ'. -/
 @[to_additive]
 theorem map_map (g : N →* P) (f : M →* N) : (S.map f).map g = S.map (g.comp f) :=
   SetLike.coe_injective <| image_image _ _ _
@@ -349,12 +271,6 @@ theorem map_map (g : N →* P) (f : M →* N) : (S.map f).map g = S.map (g.comp
 
 include mc
 
-/- warning: submonoid.mem_map_iff_mem -> Submonoid.mem_map_iff_mem 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 : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (forall {S : Submonoid.{u1} M _inst_1} {x : M}, Iff (Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{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 mc))) f x) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)) (Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall {S : Submonoid.{u3} M _inst_1} {x : M}, Iff (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f x) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)) (Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x S))
-Case conversion may be inaccurate. Consider using '#align submonoid.mem_map_iff_mem Submonoid.mem_map_iff_memₓ'. -/
 @[to_additive]
 theorem mem_map_iff_mem {f : F} (hf : Function.Injective f) {S : Submonoid M} {x : M} :
     f x ∈ S.map f ↔ x ∈ S :=
@@ -362,12 +278,6 @@ theorem mem_map_iff_mem {f : F} (hf : Function.Injective f) {S : Submonoid M} {x
 #align submonoid.mem_map_iff_mem Submonoid.mem_map_iff_mem
 #align add_submonoid.mem_map_iff_mem AddSubmonoid.mem_map_iff_mem
 
-/- warning: submonoid.map_le_iff_le_comap -> Submonoid.map_le_iff_le_comap 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F} {S : Submonoid.{u1} M _inst_1} {T : Submonoid.{u2} N _inst_2}, Iff (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) T) (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F} {S : Submonoid.{u3} M _inst_1} {T : Submonoid.{u2} N _inst_2}, Iff (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toLE.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2))))) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S) T) (LE.le.{u3} (Submonoid.{u3} M _inst_1) (Preorder.toLE.{u3} (Submonoid.{u3} M _inst_1) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1))))) S (Submonoid.comap.{u3, u2, u1} M N _inst_1 _inst_2 F mc f T))
-Case conversion may be inaccurate. Consider using '#align submonoid.map_le_iff_le_comap Submonoid.map_le_iff_le_comapₓ'. -/
 @[to_additive]
 theorem map_le_iff_le_comap {f : F} {S : Submonoid M} {T : Submonoid N} :
     S.map f ≤ T ↔ S ≤ T.comap f :=
@@ -375,155 +285,77 @@ theorem map_le_iff_le_comap {f : F} {S : Submonoid M} {T : Submonoid N} :
 #align submonoid.map_le_iff_le_comap Submonoid.map_le_iff_le_comap
 #align add_submonoid.map_le_iff_le_comap AddSubmonoid.map_le_iff_le_comap
 
-/- warning: submonoid.gc_map_comap -> Submonoid.gc_map_comap 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), GaloisConnection.{u1, u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f)
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F), GaloisConnection.{u3, u2} (Submonoid.{u3} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f) (Submonoid.comap.{u3, u2, u1} M N _inst_1 _inst_2 F mc f)
-Case conversion may be inaccurate. Consider using '#align submonoid.gc_map_comap Submonoid.gc_map_comapₓ'. -/
 @[to_additive]
 theorem gc_map_comap (f : F) : GaloisConnection (map f) (comap f) := fun S T => map_le_iff_le_comap
 #align submonoid.gc_map_comap Submonoid.gc_map_comap
 #align add_submonoid.gc_map_comap AddSubmonoid.gc_map_comap
 
-/- warning: submonoid.map_le_of_le_comap -> Submonoid.map_le_of_le_comap 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] (S : Submonoid.{u1} M _inst_1) {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {T : Submonoid.{u2} N _inst_2} {f : F}, (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T)) -> (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) T)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] (S : Submonoid.{u2} M _inst_1) {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {T : Submonoid.{u3} N _inst_2} {f : F}, (LE.le.{u2} (Submonoid.{u2} M _inst_1) (Preorder.toLE.{u2} (Submonoid.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1))))) S (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f T)) -> (LE.le.{u3} (Submonoid.{u3} N _inst_2) (Preorder.toLE.{u3} (Submonoid.{u3} N _inst_2) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2))))) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S) T)
-Case conversion may be inaccurate. Consider using '#align submonoid.map_le_of_le_comap Submonoid.map_le_of_le_comapₓ'. -/
 @[to_additive]
 theorem map_le_of_le_comap {T : Submonoid N} {f : F} : S ≤ T.comap f → S.map f ≤ T :=
   (gc_map_comap f).l_le
 #align submonoid.map_le_of_le_comap Submonoid.map_le_of_le_comap
 #align add_submonoid.map_le_of_le_comap AddSubmonoid.map_le_of_le_comap
 
-/- warning: submonoid.le_comap_of_map_le -> Submonoid.le_comap_of_map_le 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] (S : Submonoid.{u1} M _inst_1) {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {T : Submonoid.{u2} N _inst_2} {f : F}, (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) T) -> (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] (S : Submonoid.{u2} M _inst_1) {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {T : Submonoid.{u3} N _inst_2} {f : F}, (LE.le.{u3} (Submonoid.{u3} N _inst_2) (Preorder.toLE.{u3} (Submonoid.{u3} N _inst_2) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2))))) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S) T) -> (LE.le.{u2} (Submonoid.{u2} M _inst_1) (Preorder.toLE.{u2} (Submonoid.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1))))) S (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f T))
-Case conversion may be inaccurate. Consider using '#align submonoid.le_comap_of_map_le Submonoid.le_comap_of_map_leₓ'. -/
 @[to_additive]
 theorem le_comap_of_map_le {T : Submonoid N} {f : F} : S.map f ≤ T → S ≤ T.comap f :=
   (gc_map_comap f).le_u
 #align submonoid.le_comap_of_map_le Submonoid.le_comap_of_map_le
 #align add_submonoid.le_comap_of_map_le AddSubmonoid.le_comap_of_map_le
 
-/- warning: submonoid.le_comap_map -> Submonoid.le_comap_map 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] (S : Submonoid.{u1} M _inst_1) {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] (S : Submonoid.{u3} M _inst_1) {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, LE.le.{u3} (Submonoid.{u3} M _inst_1) (Preorder.toLE.{u3} (Submonoid.{u3} M _inst_1) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1))))) S (Submonoid.comap.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S))
-Case conversion may be inaccurate. Consider using '#align submonoid.le_comap_map Submonoid.le_comap_mapₓ'. -/
 @[to_additive]
 theorem le_comap_map {f : F} : S ≤ (S.map f).comap f :=
   (gc_map_comap f).le_u_l _
 #align submonoid.le_comap_map Submonoid.le_comap_map
 #align add_submonoid.le_comap_map AddSubmonoid.le_comap_map
 
-/- warning: submonoid.map_comap_le -> Submonoid.map_comap_le 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {S : Submonoid.{u2} N _inst_2} {f : F}, LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)) S
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {S : Submonoid.{u3} N _inst_2} {f : F}, LE.le.{u3} (Submonoid.{u3} N _inst_2) (Preorder.toLE.{u3} (Submonoid.{u3} N _inst_2) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2))))) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S)) S
-Case conversion may be inaccurate. Consider using '#align submonoid.map_comap_le Submonoid.map_comap_leₓ'. -/
 @[to_additive]
 theorem map_comap_le {S : Submonoid N} {f : F} : (S.comap f).map f ≤ S :=
   (gc_map_comap f).l_u_le _
 #align submonoid.map_comap_le Submonoid.map_comap_le
 #align add_submonoid.map_comap_le AddSubmonoid.map_comap_le
 
-/- warning: submonoid.monotone_map -> Submonoid.monotone_map 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, Monotone.{u1, u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f)
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, Monotone.{u3, u2} (Submonoid.{u3} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f)
-Case conversion may be inaccurate. Consider using '#align submonoid.monotone_map Submonoid.monotone_mapₓ'. -/
 @[to_additive]
 theorem monotone_map {f : F} : Monotone (map f) :=
   (gc_map_comap f).monotone_l
 #align submonoid.monotone_map Submonoid.monotone_map
 #align add_submonoid.monotone_map AddSubmonoid.monotone_map
 
-/- warning: submonoid.monotone_comap -> Submonoid.monotone_comap 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, Monotone.{u2, u1} (Submonoid.{u2} N _inst_2) (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2))) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, Monotone.{u3, u2} (Submonoid.{u3} N _inst_2) (Submonoid.{u2} M _inst_1) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2)))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1)))) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f)
-Case conversion may be inaccurate. Consider using '#align submonoid.monotone_comap Submonoid.monotone_comapₓ'. -/
 @[to_additive]
 theorem monotone_comap {f : F} : Monotone (comap f) :=
   (gc_map_comap f).monotone_u
 #align submonoid.monotone_comap Submonoid.monotone_comap
 #align add_submonoid.monotone_comap AddSubmonoid.monotone_comap
 
-/- warning: submonoid.map_comap_map -> Submonoid.map_comap_map 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] (S : Submonoid.{u1} M _inst_1) {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] (S : Submonoid.{u2} M _inst_1) {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, Eq.{succ u3} (Submonoid.{u3} N _inst_2) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S))) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S)
-Case conversion may be inaccurate. Consider using '#align submonoid.map_comap_map Submonoid.map_comap_mapₓ'. -/
 @[simp, to_additive]
 theorem map_comap_map {f : F} : ((S.map f).comap f).map f = S.map f :=
   (gc_map_comap f).l_u_l_eq_l _
 #align submonoid.map_comap_map Submonoid.map_comap_map
 #align add_submonoid.map_comap_map AddSubmonoid.map_comap_map
 
-/- warning: submonoid.comap_map_comap -> Submonoid.comap_map_comap 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {S : Submonoid.{u2} N _inst_2} {f : F}, Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S))) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {S : Submonoid.{u3} N _inst_2} {f : F}, Eq.{succ u2} (Submonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S))) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S)
-Case conversion may be inaccurate. Consider using '#align submonoid.comap_map_comap Submonoid.comap_map_comapₓ'. -/
 @[simp, to_additive]
 theorem comap_map_comap {S : Submonoid N} {f : F} : ((S.comap f).map f).comap f = S.comap f :=
   (gc_map_comap f).u_l_u_eq_u _
 #align submonoid.comap_map_comap Submonoid.comap_map_comap
 #align add_submonoid.comap_map_comap AddSubmonoid.comap_map_comap
 
-/- warning: submonoid.map_sup -> Submonoid.map_sup 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (S : Submonoid.{u1} M _inst_1) (T : Submonoid.{u1} M _inst_1) (f : F), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Sup.sup.{u1} (Submonoid.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Submonoid.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.completeLattice.{u1} M _inst_1)))) S T)) (Sup.sup.{u2} (Submonoid.{u2} N _inst_2) (SemilatticeSup.toHasSup.{u2} (Submonoid.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.completeLattice.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (S : Submonoid.{u3} M _inst_1) (T : Submonoid.{u3} M _inst_1) (f : F), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Sup.sup.{u3} (Submonoid.{u3} M _inst_1) (SemilatticeSup.toSup.{u3} (Submonoid.{u3} M _inst_1) (Lattice.toSemilatticeSup.{u3} (Submonoid.{u3} M _inst_1) (CompleteLattice.toLattice.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1)))) S T)) (Sup.sup.{u2} (Submonoid.{u2} N _inst_2) (SemilatticeSup.toSup.{u2} (Submonoid.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f T))
-Case conversion may be inaccurate. Consider using '#align submonoid.map_sup Submonoid.map_supₓ'. -/
 @[to_additive]
 theorem map_sup (S T : Submonoid M) (f : F) : (S ⊔ T).map f = S.map f ⊔ T.map f :=
   (gc_map_comap f : GaloisConnection (map f) (comap f)).l_sup
 #align submonoid.map_sup Submonoid.map_sup
 #align add_submonoid.map_sup AddSubmonoid.map_sup
 
-/- warning: submonoid.map_supr -> Submonoid.map_iSup 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {ι : Sort.{u4}} (f : F) (s : ι -> (Submonoid.{u1} M _inst_1)), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (iSup.{u1, u4} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.completeLattice.{u1} M _inst_1))) ι s)) (iSup.{u2, u4} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeSup.toHasSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.completeLattice.{u2} N _inst_2))) ι (fun (i : ι) => Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (s i)))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {ι : Sort.{u4}} (f : F) (s : ι -> (Submonoid.{u3} M _inst_1)), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (iSup.{u3, u4} (Submonoid.{u3} M _inst_1) (CompleteLattice.toSupSet.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1)) ι s)) (iSup.{u2, u4} (Submonoid.{u2} N _inst_2) (CompleteLattice.toSupSet.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)) ι (fun (i : ι) => Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (s i)))
-Case conversion may be inaccurate. Consider using '#align submonoid.map_supr Submonoid.map_iSupₓ'. -/
 @[to_additive]
 theorem map_iSup {ι : Sort _} (f : F) (s : ι → Submonoid M) : (iSup s).map f = ⨆ i, (s i).map f :=
   (gc_map_comap f : GaloisConnection (map f) (comap f)).l_iSup
 #align submonoid.map_supr Submonoid.map_iSup
 #align add_submonoid.map_supr AddSubmonoid.map_iSup
 
-/- warning: submonoid.comap_inf -> Submonoid.comap_inf 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (S : Submonoid.{u2} N _inst_2) (T : Submonoid.{u2} N _inst_2) (f : F), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Inf.inf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasInf.{u2} N _inst_2) S T)) (Inf.inf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasInf.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] (S : Submonoid.{u3} N _inst_2) (T : Submonoid.{u3} N _inst_2) (f : F), Eq.{succ u2} (Submonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Inf.inf.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instInfSubmonoid.{u3} N _inst_2) S T)) (Inf.inf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instInfSubmonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f T))
-Case conversion may be inaccurate. Consider using '#align submonoid.comap_inf Submonoid.comap_infₓ'. -/
 @[to_additive]
 theorem comap_inf (S T : Submonoid N) (f : F) : (S ⊓ T).comap f = S.comap f ⊓ T.comap f :=
   (gc_map_comap f : GaloisConnection (map f) (comap f)).u_inf
 #align submonoid.comap_inf Submonoid.comap_inf
 #align add_submonoid.comap_inf AddSubmonoid.comap_inf
 
-/- warning: submonoid.comap_infi -> Submonoid.comap_iInf 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {ι : Sort.{u4}} (f : F) (s : ι -> (Submonoid.{u2} N _inst_2)), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (iInf.{u2, u4} (Submonoid.{u2} N _inst_2) (Submonoid.hasInf.{u2} N _inst_2) ι s)) (iInf.{u1, u4} (Submonoid.{u1} M _inst_1) (Submonoid.hasInf.{u1} M _inst_1) ι (fun (i : ι) => Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (s i)))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {ι : Sort.{u4}} (f : F) (s : ι -> (Submonoid.{u3} N _inst_2)), Eq.{succ u2} (Submonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (iInf.{u3, u4} (Submonoid.{u3} N _inst_2) (Submonoid.instInfSetSubmonoid.{u3} N _inst_2) ι s)) (iInf.{u2, u4} (Submonoid.{u2} M _inst_1) (Submonoid.instInfSetSubmonoid.{u2} M _inst_1) ι (fun (i : ι) => Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (s i)))
-Case conversion may be inaccurate. Consider using '#align submonoid.comap_infi Submonoid.comap_iInfₓ'. -/
 @[to_additive]
 theorem comap_iInf {ι : Sort _} (f : F) (s : ι → Submonoid N) :
     (iInf s).comap f = ⨅ i, (s i).comap f :=
@@ -531,24 +363,12 @@ theorem comap_iInf {ι : Sort _} (f : F) (s : ι → Submonoid N) :
 #align submonoid.comap_infi Submonoid.comap_iInf
 #align add_submonoid.comap_infi AddSubmonoid.comap_iInf
 
-/- warning: submonoid.map_bot -> Submonoid.map_bot 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Bot.bot.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasBot.{u1} M _inst_1))) (Bot.bot.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasBot.{u2} N _inst_2))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] (f : F), Eq.{succ u3} (Submonoid.{u3} N _inst_2) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Bot.bot.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instBotSubmonoid.{u2} M _inst_1))) (Bot.bot.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instBotSubmonoid.{u3} N _inst_2))
-Case conversion may be inaccurate. Consider using '#align submonoid.map_bot Submonoid.map_botₓ'. -/
 @[simp, to_additive]
 theorem map_bot (f : F) : (⊥ : Submonoid M).map f = ⊥ :=
   (gc_map_comap f).l_bot
 #align submonoid.map_bot Submonoid.map_bot
 #align add_submonoid.map_bot AddSubmonoid.map_bot
 
-/- warning: submonoid.comap_top -> Submonoid.comap_top 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Top.top.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasTop.{u2} N _inst_2))) (Top.top.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasTop.{u1} M _inst_1))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F), Eq.{succ u3} (Submonoid.{u3} M _inst_1) (Submonoid.comap.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Top.top.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instTopSubmonoid.{u2} N _inst_2))) (Top.top.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instTopSubmonoid.{u3} M _inst_1))
-Case conversion may be inaccurate. Consider using '#align submonoid.comap_top Submonoid.comap_topₓ'. -/
 @[simp, to_additive]
 theorem comap_top (f : F) : (⊤ : Submonoid N).comap f = ⊤ :=
   (gc_map_comap f).u_top
@@ -571,12 +391,6 @@ variable {ι : Type _} {f : F} (hf : Function.Injective f)
 
 include hf
 
-/- warning: submonoid.gci_map_comap -> Submonoid.gciMapComap 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 : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (GaloisCoinsertion.{u1, u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
-but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u1, succ u2} M N (FunLike.coe.{succ u3, succ u1, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 mc)) f)) -> (GaloisCoinsertion.{u1, u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
-Case conversion may be inaccurate. Consider using '#align submonoid.gci_map_comap Submonoid.gciMapComapₓ'. -/
 /-- `map f` and `comap f` form a `galois_coinsertion` when `f` is injective. -/
 @[to_additive " `map f` and `comap f` form a `galois_coinsertion` when `f` is injective. "]
 def gciMapComap : GaloisCoinsertion (map f) (comap f) :=
@@ -584,108 +398,54 @@ def gciMapComap : GaloisCoinsertion (map f) (comap f) :=
 #align submonoid.gci_map_comap Submonoid.gciMapComap
 #align add_submonoid.gci_map_comap AddSubmonoid.gciMapComap
 
-/- warning: submonoid.comap_map_eq_of_injective -> Submonoid.comap_map_eq_of_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] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (forall (S : Submonoid.{u1} M _inst_1), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)) S)
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} M _inst_1), Eq.{succ u3} (Submonoid.{u3} M _inst_1) (Submonoid.comap.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)) S)
-Case conversion may be inaccurate. Consider using '#align submonoid.comap_map_eq_of_injective Submonoid.comap_map_eq_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_map_eq_of_injective (S : Submonoid M) : (S.map f).comap f = S :=
   (gciMapComap hf).u_l_eq _
 #align submonoid.comap_map_eq_of_injective Submonoid.comap_map_eq_of_injective
 #align add_submonoid.comap_map_eq_of_injective AddSubmonoid.comap_map_eq_of_injective
 
-/- warning: submonoid.comap_surjective_of_injective -> Submonoid.comap_surjective_of_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] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (Function.Surjective.{succ u2, succ u1} (Submonoid.{u2} N _inst_2) (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (Function.Surjective.{succ u3, succ u2} (Submonoid.{u3} N _inst_2) (Submonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f))
-Case conversion may be inaccurate. Consider using '#align submonoid.comap_surjective_of_injective Submonoid.comap_surjective_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_surjective_of_injective : Function.Surjective (comap f) :=
   (gciMapComap hf).u_surjective
 #align submonoid.comap_surjective_of_injective Submonoid.comap_surjective_of_injective
 #align add_submonoid.comap_surjective_of_injective AddSubmonoid.comap_surjective_of_injective
 
-/- warning: submonoid.map_injective_of_injective -> Submonoid.map_injective_of_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] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (Function.Injective.{succ u1, succ u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (Function.Injective.{succ u3, succ u2} (Submonoid.{u3} M _inst_1) (Submonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f))
-Case conversion may be inaccurate. Consider using '#align submonoid.map_injective_of_injective Submonoid.map_injective_of_injectiveₓ'. -/
 @[to_additive]
 theorem map_injective_of_injective : Function.Injective (map f) :=
   (gciMapComap hf).l_injective
 #align submonoid.map_injective_of_injective Submonoid.map_injective_of_injective
 #align add_submonoid.map_injective_of_injective AddSubmonoid.map_injective_of_injective
 
-/- warning: submonoid.comap_inf_map_of_injective -> Submonoid.comap_inf_map_of_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] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (forall (S : Submonoid.{u1} M _inst_1) (T : Submonoid.{u1} M _inst_1), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Inf.inf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasInf.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))) (Inf.inf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasInf.{u1} M _inst_1) S T))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} M _inst_1) (T : Submonoid.{u3} M _inst_1), Eq.{succ u3} (Submonoid.{u3} M _inst_1) (Submonoid.comap.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Inf.inf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instInfSubmonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f T))) (Inf.inf.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instInfSubmonoid.{u3} M _inst_1) S T))
-Case conversion may be inaccurate. Consider using '#align submonoid.comap_inf_map_of_injective Submonoid.comap_inf_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_inf_map_of_injective (S T : Submonoid M) : (S.map f ⊓ T.map f).comap f = S ⊓ T :=
   (gciMapComap hf).u_inf_l _ _
 #align submonoid.comap_inf_map_of_injective Submonoid.comap_inf_map_of_injective
 #align add_submonoid.comap_inf_map_of_injective AddSubmonoid.comap_inf_map_of_injective
 
-/- warning: submonoid.comap_infi_map_of_injective -> Submonoid.comap_iInf_map_of_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] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {ι : Type.{u4}} {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) (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 mc))) f)) -> (forall (S : ι -> (Submonoid.{u1} M _inst_1)), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (iInf.{u2, succ u4} (Submonoid.{u2} N _inst_2) (Submonoid.hasInf.{u2} N _inst_2) ι (fun (i : ι) => Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (S i)))) (iInf.{u1, succ u4} (Submonoid.{u1} M _inst_1) (Submonoid.hasInf.{u1} M _inst_1) ι S))
-but is expected to have type
-  forall {M : Type.{u4}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u4} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u4, u3} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Injective.{succ u4, succ u3} M N (FunLike.coe.{succ u2, succ u4, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u2, u4, u3} F M N (MulOneClass.toMul.{u4} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u4, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} M _inst_1)), Eq.{succ u4} (Submonoid.{u4} M _inst_1) (Submonoid.comap.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (iInf.{u3, succ u1} (Submonoid.{u3} N _inst_2) (Submonoid.instInfSetSubmonoid.{u3} N _inst_2) ι (fun (i : ι) => Submonoid.map.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (S i)))) (iInf.{u4, succ u1} (Submonoid.{u4} M _inst_1) (Submonoid.instInfSetSubmonoid.{u4} M _inst_1) ι S))
-Case conversion may be inaccurate. Consider using '#align submonoid.comap_infi_map_of_injective Submonoid.comap_iInf_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_iInf_map_of_injective (S : ι → Submonoid M) : (⨅ i, (S i).map f).comap f = iInf S :=
   (gciMapComap hf).u_iInf_l _
 #align submonoid.comap_infi_map_of_injective Submonoid.comap_iInf_map_of_injective
 #align add_submonoid.comap_infi_map_of_injective AddSubmonoid.comap_iInf_map_of_injective
 
-/- warning: submonoid.comap_sup_map_of_injective -> Submonoid.comap_sup_map_of_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] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (forall (S : Submonoid.{u1} M _inst_1) (T : Submonoid.{u1} M _inst_1), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Sup.sup.{u2} (Submonoid.{u2} N _inst_2) (SemilatticeSup.toHasSup.{u2} (Submonoid.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.completeLattice.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))) (Sup.sup.{u1} (Submonoid.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Submonoid.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.completeLattice.{u1} M _inst_1)))) S T))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} M _inst_1) (T : Submonoid.{u3} M _inst_1), Eq.{succ u3} (Submonoid.{u3} M _inst_1) (Submonoid.comap.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Sup.sup.{u2} (Submonoid.{u2} N _inst_2) (SemilatticeSup.toSup.{u2} (Submonoid.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f T))) (Sup.sup.{u3} (Submonoid.{u3} M _inst_1) (SemilatticeSup.toSup.{u3} (Submonoid.{u3} M _inst_1) (Lattice.toSemilatticeSup.{u3} (Submonoid.{u3} M _inst_1) (CompleteLattice.toLattice.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1)))) S T))
-Case conversion may be inaccurate. Consider using '#align submonoid.comap_sup_map_of_injective Submonoid.comap_sup_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_sup_map_of_injective (S T : Submonoid M) : (S.map f ⊔ T.map f).comap f = S ⊔ T :=
   (gciMapComap hf).u_sup_l _ _
 #align submonoid.comap_sup_map_of_injective Submonoid.comap_sup_map_of_injective
 #align add_submonoid.comap_sup_map_of_injective AddSubmonoid.comap_sup_map_of_injective
 
-/- warning: submonoid.comap_supr_map_of_injective -> Submonoid.comap_iSup_map_of_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] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {ι : Type.{u4}} {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) (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 mc))) f)) -> (forall (S : ι -> (Submonoid.{u1} M _inst_1)), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (iSup.{u2, succ u4} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeSup.toHasSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.completeLattice.{u2} N _inst_2))) ι (fun (i : ι) => Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (S i)))) (iSup.{u1, succ u4} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.completeLattice.{u1} M _inst_1))) ι S))
-but is expected to have type
-  forall {M : Type.{u4}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u4} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u4, u3} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Injective.{succ u4, succ u3} M N (FunLike.coe.{succ u2, succ u4, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u2, u4, u3} F M N (MulOneClass.toMul.{u4} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u4, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} M _inst_1)), Eq.{succ u4} (Submonoid.{u4} M _inst_1) (Submonoid.comap.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (iSup.{u3, succ u1} (Submonoid.{u3} N _inst_2) (CompleteLattice.toSupSet.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2)) ι (fun (i : ι) => Submonoid.map.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (S i)))) (iSup.{u4, succ u1} (Submonoid.{u4} M _inst_1) (CompleteLattice.toSupSet.{u4} (Submonoid.{u4} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u4} M _inst_1)) ι S))
-Case conversion may be inaccurate. Consider using '#align submonoid.comap_supr_map_of_injective Submonoid.comap_iSup_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_iSup_map_of_injective (S : ι → Submonoid M) : (⨆ i, (S i).map f).comap f = iSup S :=
   (gciMapComap hf).u_iSup_l _
 #align submonoid.comap_supr_map_of_injective Submonoid.comap_iSup_map_of_injective
 #align add_submonoid.comap_supr_map_of_injective AddSubmonoid.comap_iSup_map_of_injective
 
-/- warning: submonoid.map_le_map_iff_of_injective -> Submonoid.map_le_map_iff_of_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] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (forall {S : Submonoid.{u1} M _inst_1} {T : Submonoid.{u1} M _inst_1}, Iff (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T)) (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S T))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall {S : Submonoid.{u3} M _inst_1} {T : Submonoid.{u3} M _inst_1}, Iff (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toLE.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2))))) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f T)) (LE.le.{u3} (Submonoid.{u3} M _inst_1) (Preorder.toLE.{u3} (Submonoid.{u3} M _inst_1) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1))))) S T))
-Case conversion may be inaccurate. Consider using '#align submonoid.map_le_map_iff_of_injective Submonoid.map_le_map_iff_of_injectiveₓ'. -/
 @[to_additive]
 theorem map_le_map_iff_of_injective {S T : Submonoid M} : S.map f ≤ T.map f ↔ S ≤ T :=
   (gciMapComap hf).l_le_l_iff
 #align submonoid.map_le_map_iff_of_injective Submonoid.map_le_map_iff_of_injective
 #align add_submonoid.map_le_map_iff_of_injective AddSubmonoid.map_le_map_iff_of_injective
 
-/- warning: submonoid.map_strict_mono_of_injective -> Submonoid.map_strictMono_of_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] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (StrictMono.{u1, u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (StrictMono.{u3, u2} (Submonoid.{u3} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f))
-Case conversion may be inaccurate. Consider using '#align submonoid.map_strict_mono_of_injective Submonoid.map_strictMono_of_injectiveₓ'. -/
 @[to_additive]
 theorem map_strictMono_of_injective : StrictMono (map f) :=
   (gciMapComap hf).strictMono_l
@@ -700,12 +460,6 @@ variable {ι : Type _} {f : F} (hf : Function.Surjective f)
 
 include hf
 
-/- warning: submonoid.gi_map_comap -> Submonoid.giMapComap 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (GaloisInsertion.{u1, u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
-but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{succ u3, succ u1, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 mc)) f)) -> (GaloisInsertion.{u1, u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
-Case conversion may be inaccurate. Consider using '#align submonoid.gi_map_comap Submonoid.giMapComapₓ'. -/
 /-- `map f` and `comap f` form a `galois_insertion` when `f` is surjective. -/
 @[to_additive " `map f` and `comap f` form a `galois_insertion` when `f` is surjective. "]
 def giMapComap : GaloisInsertion (map f) (comap f) :=
@@ -715,108 +469,54 @@ def giMapComap : GaloisInsertion (map f) (comap f) :=
 #align submonoid.gi_map_comap Submonoid.giMapComap
 #align add_submonoid.gi_map_comap AddSubmonoid.giMapComap
 
-/- warning: submonoid.map_comap_eq_of_surjective -> Submonoid.map_comap_eq_of_surjective 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (forall (S : Submonoid.{u2} N _inst_2), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)) S)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} N _inst_2), Eq.{succ u3} (Submonoid.{u3} N _inst_2) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S)) S)
-Case conversion may be inaccurate. Consider using '#align submonoid.map_comap_eq_of_surjective Submonoid.map_comap_eq_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_comap_eq_of_surjective (S : Submonoid N) : (S.comap f).map f = S :=
   (giMapComap hf).l_u_eq _
 #align submonoid.map_comap_eq_of_surjective Submonoid.map_comap_eq_of_surjective
 #align add_submonoid.map_comap_eq_of_surjective AddSubmonoid.map_comap_eq_of_surjective
 
-/- warning: submonoid.map_surjective_of_surjective -> Submonoid.map_surjective_of_surjective 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (Function.Surjective.{succ u1, succ u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (Function.Surjective.{succ u3, succ u2} (Submonoid.{u3} M _inst_1) (Submonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f))
-Case conversion may be inaccurate. Consider using '#align submonoid.map_surjective_of_surjective Submonoid.map_surjective_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_surjective_of_surjective : Function.Surjective (map f) :=
   (giMapComap hf).l_surjective
 #align submonoid.map_surjective_of_surjective Submonoid.map_surjective_of_surjective
 #align add_submonoid.map_surjective_of_surjective AddSubmonoid.map_surjective_of_surjective
 
-/- warning: submonoid.comap_injective_of_surjective -> Submonoid.comap_injective_of_surjective 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (Function.Injective.{succ u2, succ u1} (Submonoid.{u2} N _inst_2) (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (Function.Injective.{succ u3, succ u2} (Submonoid.{u3} N _inst_2) (Submonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f))
-Case conversion may be inaccurate. Consider using '#align submonoid.comap_injective_of_surjective Submonoid.comap_injective_of_surjectiveₓ'. -/
 @[to_additive]
 theorem comap_injective_of_surjective : Function.Injective (comap f) :=
   (giMapComap hf).u_injective
 #align submonoid.comap_injective_of_surjective Submonoid.comap_injective_of_surjective
 #align add_submonoid.comap_injective_of_surjective AddSubmonoid.comap_injective_of_surjective
 
-/- warning: submonoid.map_inf_comap_of_surjective -> Submonoid.map_inf_comap_of_surjective 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (forall (S : Submonoid.{u2} N _inst_2) (T : Submonoid.{u2} N _inst_2), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Inf.inf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasInf.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))) (Inf.inf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasInf.{u2} N _inst_2) S T))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} N _inst_2) (T : Submonoid.{u3} N _inst_2), Eq.{succ u3} (Submonoid.{u3} N _inst_2) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Inf.inf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instInfSubmonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f T))) (Inf.inf.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instInfSubmonoid.{u3} N _inst_2) S T))
-Case conversion may be inaccurate. Consider using '#align submonoid.map_inf_comap_of_surjective Submonoid.map_inf_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_inf_comap_of_surjective (S T : Submonoid N) : (S.comap f ⊓ T.comap f).map f = S ⊓ T :=
   (giMapComap hf).l_inf_u _ _
 #align submonoid.map_inf_comap_of_surjective Submonoid.map_inf_comap_of_surjective
 #align add_submonoid.map_inf_comap_of_surjective AddSubmonoid.map_inf_comap_of_surjective
 
-/- warning: submonoid.map_infi_comap_of_surjective -> Submonoid.map_iInf_comap_of_surjective 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {ι : Type.{u4}} {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (forall (S : ι -> (Submonoid.{u2} N _inst_2)), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (iInf.{u1, succ u4} (Submonoid.{u1} M _inst_1) (Submonoid.hasInf.{u1} M _inst_1) ι (fun (i : ι) => Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (S i)))) (iInf.{u2, succ u4} (Submonoid.{u2} N _inst_2) (Submonoid.hasInf.{u2} N _inst_2) ι S))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u4}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u4} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u3, u4} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Surjective.{succ u3, succ u4} M N (FunLike.coe.{succ u2, succ u3, succ u4} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u2, u3, u4} F M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u4} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u3, u4} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} N _inst_2)), Eq.{succ u4} (Submonoid.{u4} N _inst_2) (Submonoid.map.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (iInf.{u3, succ u1} (Submonoid.{u3} M _inst_1) (Submonoid.instInfSetSubmonoid.{u3} M _inst_1) ι (fun (i : ι) => Submonoid.comap.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (S i)))) (iInf.{u4, succ u1} (Submonoid.{u4} N _inst_2) (Submonoid.instInfSetSubmonoid.{u4} N _inst_2) ι S))
-Case conversion may be inaccurate. Consider using '#align submonoid.map_infi_comap_of_surjective Submonoid.map_iInf_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_iInf_comap_of_surjective (S : ι → Submonoid N) : (⨅ i, (S i).comap f).map f = iInf S :=
   (giMapComap hf).l_iInf_u _
 #align submonoid.map_infi_comap_of_surjective Submonoid.map_iInf_comap_of_surjective
 #align add_submonoid.map_infi_comap_of_surjective AddSubmonoid.map_iInf_comap_of_surjective
 
-/- warning: submonoid.map_sup_comap_of_surjective -> Submonoid.map_sup_comap_of_surjective 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (forall (S : Submonoid.{u2} N _inst_2) (T : Submonoid.{u2} N _inst_2), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Sup.sup.{u1} (Submonoid.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Submonoid.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.completeLattice.{u1} M _inst_1)))) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))) (Sup.sup.{u2} (Submonoid.{u2} N _inst_2) (SemilatticeSup.toHasSup.{u2} (Submonoid.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.completeLattice.{u2} N _inst_2)))) S T))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} N _inst_2) (T : Submonoid.{u3} N _inst_2), Eq.{succ u3} (Submonoid.{u3} N _inst_2) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Sup.sup.{u2} (Submonoid.{u2} M _inst_1) (SemilatticeSup.toSup.{u2} (Submonoid.{u2} M _inst_1) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1)))) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f T))) (Sup.sup.{u3} (Submonoid.{u3} N _inst_2) (SemilatticeSup.toSup.{u3} (Submonoid.{u3} N _inst_2) (Lattice.toSemilatticeSup.{u3} (Submonoid.{u3} N _inst_2) (CompleteLattice.toLattice.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2)))) S T))
-Case conversion may be inaccurate. Consider using '#align submonoid.map_sup_comap_of_surjective Submonoid.map_sup_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_sup_comap_of_surjective (S T : Submonoid N) : (S.comap f ⊔ T.comap f).map f = S ⊔ T :=
   (giMapComap hf).l_sup_u _ _
 #align submonoid.map_sup_comap_of_surjective Submonoid.map_sup_comap_of_surjective
 #align add_submonoid.map_sup_comap_of_surjective AddSubmonoid.map_sup_comap_of_surjective
 
-/- warning: submonoid.map_supr_comap_of_surjective -> Submonoid.map_iSup_comap_of_surjective 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {ι : Type.{u4}} {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (forall (S : ι -> (Submonoid.{u2} N _inst_2)), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (iSup.{u1, succ u4} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.completeLattice.{u1} M _inst_1))) ι (fun (i : ι) => Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (S i)))) (iSup.{u2, succ u4} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeSup.toHasSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.completeLattice.{u2} N _inst_2))) ι S))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u4}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u4} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u3, u4} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Surjective.{succ u3, succ u4} M N (FunLike.coe.{succ u2, succ u3, succ u4} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u2, u3, u4} F M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u4} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u3, u4} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} N _inst_2)), Eq.{succ u4} (Submonoid.{u4} N _inst_2) (Submonoid.map.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (iSup.{u3, succ u1} (Submonoid.{u3} M _inst_1) (CompleteLattice.toSupSet.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1)) ι (fun (i : ι) => Submonoid.comap.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (S i)))) (iSup.{u4, succ u1} (Submonoid.{u4} N _inst_2) (CompleteLattice.toSupSet.{u4} (Submonoid.{u4} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u4} N _inst_2)) ι S))
-Case conversion may be inaccurate. Consider using '#align submonoid.map_supr_comap_of_surjective Submonoid.map_iSup_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_iSup_comap_of_surjective (S : ι → Submonoid N) : (⨆ i, (S i).comap f).map f = iSup S :=
   (giMapComap hf).l_iSup_u _
 #align submonoid.map_supr_comap_of_surjective Submonoid.map_iSup_comap_of_surjective
 #align add_submonoid.map_supr_comap_of_surjective AddSubmonoid.map_iSup_comap_of_surjective
 
-/- warning: submonoid.comap_le_comap_iff_of_surjective -> Submonoid.comap_le_comap_iff_of_surjective 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (forall {S : Submonoid.{u2} N _inst_2} {T : Submonoid.{u2} N _inst_2}, Iff (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T)) (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) S T))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall {S : Submonoid.{u3} N _inst_2} {T : Submonoid.{u3} N _inst_2}, Iff (LE.le.{u2} (Submonoid.{u2} M _inst_1) (Preorder.toLE.{u2} (Submonoid.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1))))) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f T)) (LE.le.{u3} (Submonoid.{u3} N _inst_2) (Preorder.toLE.{u3} (Submonoid.{u3} N _inst_2) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2))))) S T))
-Case conversion may be inaccurate. Consider using '#align submonoid.comap_le_comap_iff_of_surjective Submonoid.comap_le_comap_iff_of_surjectiveₓ'. -/
 @[to_additive]
 theorem comap_le_comap_iff_of_surjective {S T : Submonoid N} : S.comap f ≤ T.comap f ↔ S ≤ T :=
   (giMapComap hf).u_le_u_iff
 #align submonoid.comap_le_comap_iff_of_surjective Submonoid.comap_le_comap_iff_of_surjective
 #align add_submonoid.comap_le_comap_iff_of_surjective AddSubmonoid.comap_le_comap_iff_of_surjective
 
-/- warning: submonoid.comap_strict_mono_of_surjective -> Submonoid.comap_strictMono_of_surjective 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (StrictMono.{u2, u1} (Submonoid.{u2} N _inst_2) (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2))) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (StrictMono.{u3, u2} (Submonoid.{u3} N _inst_2) (Submonoid.{u2} M _inst_1) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2)))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1)))) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f))
-Case conversion may be inaccurate. Consider using '#align submonoid.comap_strict_mono_of_surjective Submonoid.comap_strictMono_of_surjectiveₓ'. -/
 @[to_additive]
 theorem comap_strictMono_of_surjective : StrictMono (comap f) :=
   (giMapComap hf).strictMono_u
@@ -893,12 +593,6 @@ instance nPow {M} [Monoid M] {A : Type _} [SetLike A M] [SubmonoidClass A M] (S
 
 attribute [to_additive] SubmonoidClass.nPow
 
-/- warning: submonoid_class.coe_pow -> SubmonoidClass.coe_pow is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_5 : Monoid.{u1} M] {A : Type.{u2}} [_inst_6 : SetLike.{u2, u1} A M] [_inst_7 : SubmonoidClass.{u2, u1} A M (Monoid.toMulOneClass.{u1} M _inst_5) _inst_6] {S : A} (x : coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_6) S) (n : Nat), Eq.{succ u1} M ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_6) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_6) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_6) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_6) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_6) x S))))) (HPow.hPow.{u1, 0, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_6) S) Nat (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_6) S) (instHPow.{u1, 0} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_6) S) Nat (SubmonoidClass.nPow.{u1, u2} M _inst_5 A _inst_6 _inst_7 S)) x n)) (HPow.hPow.{u1, 0, u1} M Nat M (instHPow.{u1, 0} M Nat (Monoid.Pow.{u1} M _inst_5)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_6) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_6) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_6) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_6) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_6) x S))))) x) n)
-but is expected to have type
-  forall {M : Type.{u2}} [_inst_5 : Monoid.{u2} M] {A : Type.{u1}} [_inst_6 : SetLike.{u1, u2} A M] [_inst_7 : SubmonoidClass.{u1, u2} A M (Monoid.toMulOneClass.{u2} M _inst_5) _inst_6] {S : A} (x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_6) x S)) (n : Nat), Eq.{succ u2} M (Subtype.val.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Set.{u2} M) (Set.instMembershipSet.{u2} M) x (SetLike.coe.{u1, u2} A M _inst_6 S)) (HPow.hPow.{u2, 0, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_6) x S)) Nat (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_6) x S)) (instHPow.{u2, 0} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_6) x S)) Nat (SubmonoidClass.nPow.{u2, u1} M _inst_5 A _inst_6 _inst_7 S)) x n)) (HPow.hPow.{u2, 0, u2} M Nat M (instHPow.{u2, 0} M Nat (Monoid.Pow.{u2} M _inst_5)) (Subtype.val.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Set.{u2} M) (Set.instMembershipSet.{u2} M) x (SetLike.coe.{u1, u2} A M _inst_6 S)) x) n)
-Case conversion may be inaccurate. Consider using '#align submonoid_class.coe_pow SubmonoidClass.coe_powₓ'. -/
 @[simp, norm_cast, to_additive]
 theorem coe_pow {M} [Monoid M] {A : Type _} [SetLike A M] [SubmonoidClass A M] {S : A} (x : S)
     (n : ℕ) : (↑(x ^ n) : M) = ↑x ^ n :=
@@ -906,12 +600,6 @@ theorem coe_pow {M} [Monoid M] {A : Type _} [SetLike A M] [SubmonoidClass A M] {
 #align submonoid_class.coe_pow SubmonoidClass.coe_pow
 #align add_submonoid_class.coe_nsmul AddSubmonoidClass.coe_nsmul
 
-/- warning: submonoid_class.mk_pow -> SubmonoidClass.mk_pow is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_5 : Monoid.{u1} M] {A : Type.{u2}} [_inst_6 : SetLike.{u2, u1} A M] [_inst_7 : SubmonoidClass.{u2, u1} A M (Monoid.toMulOneClass.{u1} M _inst_5) _inst_6] {S : A} (x : M) (hx : Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_6) x S) (n : Nat), Eq.{succ u1} (Subtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_6) x S)) (HPow.hPow.{u1, 0, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_6) x S)) Nat (Subtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_6) x S)) (instHPow.{u1, 0} (Subtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_6) x S)) Nat (SubmonoidClass.nPow.{u1, u2} M _inst_5 A _inst_6 _inst_7 S)) (Subtype.mk.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_6) x S) x hx) n) (Subtype.mk.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_6) x S) (HPow.hPow.{u1, 0, u1} M Nat M (instHPow.{u1, 0} M Nat (Monoid.Pow.{u1} M _inst_5)) x n) (pow_mem.{u1, u2} M _inst_5 A _inst_6 _inst_7 S x hx n))
-but is expected to have type
-  forall {M : Type.{u2}} [_inst_5 : Monoid.{u2} M] {A : Type.{u1}} [_inst_6 : SetLike.{u1, u2} A M] [_inst_7 : SubmonoidClass.{u1, u2} A M (Monoid.toMulOneClass.{u2} M _inst_5) _inst_6] {S : A} (x : M) (hx : Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_6) x S) (n : Nat), Eq.{succ u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_6) x S)) (HPow.hPow.{u2, 0, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_6) x S)) Nat (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_6) x S)) (instHPow.{u2, 0} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_6) x S)) Nat (SubmonoidClass.nPow.{u2, u1} M _inst_5 A _inst_6 _inst_7 S)) (Subtype.mk.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_6) x S) x hx) n) (Subtype.mk.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_6) x S) (HPow.hPow.{u2, 0, u2} M Nat M (instHPow.{u2, 0} M Nat (Monoid.Pow.{u2} M _inst_5)) x n) (pow_mem.{u1, u2} M A _inst_5 _inst_6 _inst_7 S x hx n))
-Case conversion may be inaccurate. Consider using '#align submonoid_class.mk_pow SubmonoidClass.mk_powₓ'. -/
 @[simp, to_additive]
 theorem mk_pow {M} [Monoid M] {A : Type _} [SetLike A M] [SubmonoidClass A M] {S : A} (x : M)
     (hx : x ∈ S) (n : ℕ) : (⟨x, hx⟩ : S) ^ n = ⟨x ^ n, pow_mem hx n⟩ :=
@@ -1015,12 +703,6 @@ def Subtype : S' →* M :=
 #align add_submonoid_class.subtype AddSubmonoidClass.Subtype
 -/
 
-/- warning: submonoid_class.coe_subtype -> SubmonoidClass.coe_subtype is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {A : Type.{u2}} [_inst_4 : SetLike.{u2, u1} A M] [hA : SubmonoidClass.{u2, u1} A M _inst_1 _inst_4] (S' : A), Eq.{succ u1} ((fun (_x : MonoidHom.{u1, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') M (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 A _inst_4 hA S') _inst_1) => (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') -> M) (SubmonoidClass.Subtype.{u1, u2} M _inst_1 A _inst_4 hA S')) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') M (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 A _inst_4 hA S') _inst_1) (fun (_x : MonoidHom.{u1, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') M (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 A _inst_4 hA S') _inst_1) => (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') -> M) (MonoidHom.hasCoeToFun.{u1, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') M (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 A _inst_4 hA S') _inst_1) (SubmonoidClass.Subtype.{u1, u2} M _inst_1 A _inst_4 hA S')) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') M (coeBase.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_4) x S'))))))
-but is expected to have type
-  forall {M : Type.{u2}} [_inst_1 : MulOneClass.{u2} M] {A : Type.{u1}} [_inst_4 : SetLike.{u1, u2} A M] [hA : SubmonoidClass.{u1, u2} A M _inst_1 _inst_4] (S' : A), Eq.{succ u2} (forall (a : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) => M) a) (FunLike.coe.{succ u2, succ u2, succ u2} (MonoidHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) => M) _x) (MulHomClass.toFunLike.{u2, u2, u2} (MonoidHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (MulOneClass.toMul.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S')) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{u2, u2, u2} (MonoidHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1 (MonoidHom.monoidHomClass.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1))) (SubmonoidClass.Subtype.{u2, u1} M _inst_1 A _inst_4 hA S')) (Subtype.val.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S'))
-Case conversion may be inaccurate. Consider using '#align submonoid_class.coe_subtype SubmonoidClass.coe_subtypeₓ'. -/
 @[simp, to_additive]
 theorem coe_subtype : (SubmonoidClass.Subtype S' : S' → M) = coe :=
   rfl
@@ -1031,12 +713,6 @@ end SubmonoidClass
 
 namespace Submonoid
 
-/- warning: submonoid.has_mul -> Submonoid.mul is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1), Mul.{u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S)
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1), Mul.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S))
-Case conversion may be inaccurate. Consider using '#align submonoid.has_mul Submonoid.mulₓ'. -/
 /-- A submonoid of a monoid inherits a multiplication. -/
 @[to_additive "An `add_submonoid` of an `add_monoid` inherits an addition."]
 instance mul : Mul S :=
@@ -1044,12 +720,6 @@ instance mul : Mul S :=
 #align submonoid.has_mul Submonoid.mul
 #align add_submonoid.has_add AddSubmonoid.add
 
-/- warning: submonoid.has_one -> Submonoid.one is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1), One.{u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S)
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1), One.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S))
-Case conversion may be inaccurate. Consider using '#align submonoid.has_one Submonoid.oneₓ'. -/
 /-- A submonoid of a monoid inherits a 1. -/
 @[to_additive "An `add_submonoid` of an `add_monoid` inherits a zero."]
 instance one : One S :=
@@ -1057,36 +727,18 @@ instance one : One S :=
 #align submonoid.has_one Submonoid.one
 #align add_submonoid.has_zero AddSubmonoid.zero
 
-/- warning: submonoid.coe_mul -> Submonoid.coe_mul is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1) (x : coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (y : coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S), Eq.{succ u1} M ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S))))) (HMul.hMul.{u1, u1, u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (instHMul.{u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (Submonoid.mul.{u1} M _inst_1 S)) x y)) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M _inst_1)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S))))) x) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S))))) y))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1) (x : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (y : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)), Eq.{succ u1} M (Subtype.val.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) x (SetLike.coe.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1) S)) (HMul.hMul.{u1, u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (instHMul.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (Submonoid.mul.{u1} M _inst_1 S)) x y)) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M _inst_1)) (Subtype.val.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) x (SetLike.coe.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1) S)) x) (Subtype.val.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) x (SetLike.coe.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1) S)) y))
-Case conversion may be inaccurate. Consider using '#align submonoid.coe_mul Submonoid.coe_mulₓ'. -/
 @[simp, norm_cast, to_additive]
 theorem coe_mul (x y : S) : (↑(x * y) : M) = ↑x * ↑y :=
   rfl
 #align submonoid.coe_mul Submonoid.coe_mul
 #align add_submonoid.coe_add AddSubmonoid.coe_add
 
-/- warning: submonoid.coe_one -> Submonoid.coe_one is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1), Eq.{succ u1} M ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S))))) (OfNat.ofNat.{u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) 1 (OfNat.mk.{u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) 1 (One.one.{u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (Submonoid.one.{u1} M _inst_1 S))))) (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M _inst_1))))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1), Eq.{succ u1} M (Subtype.val.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) x (SetLike.coe.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1) S)) (OfNat.ofNat.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) 1 (One.toOfNat1.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (Submonoid.one.{u1} M _inst_1 S)))) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (MulOneClass.toOne.{u1} M _inst_1)))
-Case conversion may be inaccurate. Consider using '#align submonoid.coe_one Submonoid.coe_oneₓ'. -/
 @[simp, norm_cast, to_additive]
 theorem coe_one : ((1 : S) : M) = 1 :=
   rfl
 #align submonoid.coe_one Submonoid.coe_one
 #align add_submonoid.coe_zero AddSubmonoid.coe_zero
 
-/- warning: submonoid.mk_mul_mk -> Submonoid.mk_mul_mk is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1) (x : M) (y : M) (hx : Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S) (hy : Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) y S), Eq.{succ u1} (Subtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S)) (HMul.hMul.{u1, u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S)) (Subtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S)) (Subtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S)) (instHMul.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S)) (Submonoid.mul.{u1} M _inst_1 S)) (Subtype.mk.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S) x hx) (Subtype.mk.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S) y hy)) (Subtype.mk.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M _inst_1)) x y) (Submonoid.mul_mem.{u1} M _inst_1 S x y hx hy))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1) (x : M) (y : M) (hx : Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S) (hy : Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) y S), Eq.{succ u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (HMul.hMul.{u1, u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (instHMul.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (Submonoid.mul.{u1} M _inst_1 S)) (Subtype.mk.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S) x hx) (Subtype.mk.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S) y hy)) (Subtype.mk.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M _inst_1)) x y) (Submonoid.mul_mem.{u1} M _inst_1 S x y hx hy))
-Case conversion may be inaccurate. Consider using '#align submonoid.mk_mul_mk Submonoid.mk_mul_mkₓ'. -/
 @[simp, to_additive]
 theorem mk_mul_mk (x y : M) (hx : x ∈ S) (hy : y ∈ S) :
     (⟨x, hx⟩ : S) * ⟨y, hy⟩ = ⟨x * y, S.mul_mem hx hy⟩ :=
@@ -1094,36 +746,18 @@ theorem mk_mul_mk (x y : M) (hx : x ∈ S) (hy : y ∈ S) :
 #align submonoid.mk_mul_mk Submonoid.mk_mul_mk
 #align add_submonoid.mk_add_mk AddSubmonoid.mk_add_mk
 
-/- warning: submonoid.mul_def -> Submonoid.mul_def is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1) (x : coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (y : coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S), Eq.{succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (HMul.hMul.{u1, u1, u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (instHMul.{u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (Submonoid.mul.{u1} M _inst_1 S)) x y) (Subtype.mk.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M _inst_1)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S))))) x) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S))))) y)) (Submonoid.mul_mem.{u1} M _inst_1 S ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S))))) x) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S))))) y) (Subtype.property.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S) x) (Subtype.property.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S) y)))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1) (x : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (y : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)), Eq.{succ u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (HMul.hMul.{u1, u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (instHMul.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (Submonoid.mul.{u1} M _inst_1 S)) x y) (Subtype.mk.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M _inst_1)) (Subtype.val.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) x (SetLike.coe.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1) S)) x) (Subtype.val.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) x (SetLike.coe.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1) S)) y)) (Submonoid.mul_mem.{u1} M _inst_1 S (Subtype.val.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) x (SetLike.coe.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1) S)) x) (Subtype.val.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) x (SetLike.coe.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1) S)) y) (Subtype.property.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S) x) (Subtype.property.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S) y)))
-Case conversion may be inaccurate. Consider using '#align submonoid.mul_def Submonoid.mul_defₓ'. -/
 @[to_additive]
 theorem mul_def (x y : S) : x * y = ⟨x * y, S.mul_mem x.2 y.2⟩ :=
   rfl
 #align submonoid.mul_def Submonoid.mul_def
 #align add_submonoid.add_def AddSubmonoid.add_def
 
-/- warning: submonoid.one_def -> Submonoid.one_def is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1), Eq.{succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (OfNat.ofNat.{u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) 1 (OfNat.mk.{u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) 1 (One.one.{u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (Submonoid.one.{u1} M _inst_1 S)))) (Subtype.mk.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S) (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M _inst_1)))) (Submonoid.one_mem.{u1} M _inst_1 S))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1), Eq.{succ u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (OfNat.ofNat.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) 1 (One.toOfNat1.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (Submonoid.one.{u1} M _inst_1 S))) (Subtype.mk.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S) (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (MulOneClass.toOne.{u1} M _inst_1))) (Submonoid.one_mem.{u1} M _inst_1 S))
-Case conversion may be inaccurate. Consider using '#align submonoid.one_def Submonoid.one_defₓ'. -/
 @[to_additive]
 theorem one_def : (1 : S) = ⟨1, S.one_mem⟩ :=
   rfl
 #align submonoid.one_def Submonoid.one_def
 #align add_submonoid.zero_def AddSubmonoid.zero_def
 
-/- warning: submonoid.to_mul_one_class -> Submonoid.toMulOneClass is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_4 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_4), MulOneClass.{u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_4) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_4) M (Submonoid.setLike.{u1} M _inst_4)) S)
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_4 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_4), MulOneClass.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_4) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_4) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_4)) x S))
-Case conversion may be inaccurate. Consider using '#align submonoid.to_mul_one_class Submonoid.toMulOneClassₓ'. -/
 /-- A submonoid of a unital magma inherits a unital magma structure. -/
 @[to_additive
       "An `add_submonoid` of an unital additive magma inherits an unital additive magma\nstructure."]
@@ -1132,12 +766,6 @@ instance toMulOneClass {M : Type _} [MulOneClass M] (S : Submonoid M) : MulOneCl
 #align submonoid.to_mul_one_class Submonoid.toMulOneClass
 #align add_submonoid.to_add_zero_class AddSubmonoid.toAddZeroClass
 
-/- warning: submonoid.pow_mem -> Submonoid.pow_mem is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_4 : Monoid.{u1} M] (S : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_4)) {x : M}, (Membership.Mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_4)) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_4)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_4))) x S) -> (forall (n : Nat), Membership.Mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_4)) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_4)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_4))) (HPow.hPow.{u1, 0, u1} M Nat M (instHPow.{u1, 0} M Nat (Monoid.Pow.{u1} M _inst_4)) x n) S)
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_4 : Monoid.{u1} M] (S : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_4)) {x : M}, (Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_4)) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_4)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_4))) x S) -> (forall (n : Nat), Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_4)) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_4)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_4))) (HPow.hPow.{u1, 0, u1} M Nat M (instHPow.{u1, 0} M Nat (Monoid.Pow.{u1} M _inst_4)) x n) S)
-Case conversion may be inaccurate. Consider using '#align submonoid.pow_mem Submonoid.pow_memₓ'. -/
 @[to_additive]
 protected theorem pow_mem {M : Type _} [Monoid M] (S : Submonoid M) {x : M} (hx : x ∈ S) (n : ℕ) :
     x ^ n ∈ S :=
@@ -1146,11 +774,6 @@ protected theorem pow_mem {M : Type _} [Monoid M] (S : Submonoid M) {x : M} (hx
 #align add_submonoid.nsmul_mem AddSubmonoid.nsmul_mem
 
 /- warning: submonoid.coe_pow clashes with [anonymous] -> [anonymous]
-warning: submonoid.coe_pow -> [anonymous] is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u_1}} [_inst_4 : Monoid.{u_1} M] {S : Submonoid.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4)} (x : coeSort.{succ u_1, succ (succ u_1)} (Submonoid.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4)) Type.{u_1} (SetLike.hasCoeToSort.{u_1, u_1} (Submonoid.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4)) M (Submonoid.setLike.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4))) S) (n : Nat), Eq.{succ u_1} M ((fun (a : Type.{u_1}) (b : Type.{u_1}) [self : HasLiftT.{succ u_1, succ u_1} a b] => self.0) (coeSort.{succ u_1, succ (succ u_1)} (Submonoid.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4)) Type.{u_1} (SetLike.hasCoeToSort.{u_1, u_1} (Submonoid.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4)) M (Submonoid.setLike.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4))) S) M (HasLiftT.mk.{succ u_1, succ u_1} (coeSort.{succ u_1, succ (succ u_1)} (Submonoid.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4)) Type.{u_1} (SetLike.hasCoeToSort.{u_1, u_1} (Submonoid.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4)) M (Submonoid.setLike.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4))) S) M (CoeTCₓ.coe.{succ u_1, succ u_1} (coeSort.{succ u_1, succ (succ u_1)} (Submonoid.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4)) Type.{u_1} (SetLike.hasCoeToSort.{u_1, u_1} (Submonoid.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4)) M (Submonoid.setLike.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4))) S) M (coeBase.{succ u_1, succ u_1} (coeSort.{succ u_1, succ (succ u_1)} (Submonoid.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4)) Type.{u_1} (SetLike.hasCoeToSort.{u_1, u_1} (Submonoid.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4)) M (Submonoid.setLike.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4))) S) M (coeSubtype.{succ u_1} M (fun (x : M) => Membership.Mem.{u_1, u_1} M (Submonoid.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4)) (SetLike.hasMem.{u_1, u_1} (Submonoid.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4)) M (Submonoid.setLike.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4))) x S))))) (HPow.hPow.{u_1, 0, u_1} (coeSort.{succ u_1, succ (succ u_1)} (Submonoid.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4)) Type.{u_1} (SetLike.hasCoeToSort.{u_1, u_1} (Submonoid.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4)) M (Submonoid.setLike.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4))) S) Nat (coeSort.{succ u_1, succ (succ u_1)} (Submonoid.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4)) Type.{u_1} (SetLike.hasCoeToSort.{u_1, u_1} (Submonoid.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4)) M (Submonoid.setLike.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4))) S) (instHPow.{u_1, 0} (coeSort.{succ u_1, succ (succ u_1)} (Submonoid.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4)) Type.{u_1} (SetLike.hasCoeToSort.{u_1, u_1} (Submonoid.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4)) M (Submonoid.setLike.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4))) S) Nat (SubmonoidClass.nPow.{u_1, u_1} M _inst_4 (Submonoid.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4)) (Submonoid.setLike.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4)) (Submonoid.submonoidClass.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4)) S)) x n)) (HPow.hPow.{u_1, 0, u_1} M Nat M (instHPow.{u_1, 0} M Nat (Monoid.Pow.{u_1} M _inst_4)) ((fun (a : Type.{u_1}) (b : Type.{u_1}) [self : HasLiftT.{succ u_1, succ u_1} a b] => self.0) (coeSort.{succ u_1, succ (succ u_1)} (Submonoid.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4)) Type.{u_1} (SetLike.hasCoeToSort.{u_1, u_1} (Submonoid.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4)) M (Submonoid.setLike.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4))) S) M (HasLiftT.mk.{succ u_1, succ u_1} (coeSort.{succ u_1, succ (succ u_1)} (Submonoid.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4)) Type.{u_1} (SetLike.hasCoeToSort.{u_1, u_1} (Submonoid.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4)) M (Submonoid.setLike.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4))) S) M (CoeTCₓ.coe.{succ u_1, succ u_1} (coeSort.{succ u_1, succ (succ u_1)} (Submonoid.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4)) Type.{u_1} (SetLike.hasCoeToSort.{u_1, u_1} (Submonoid.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4)) M (Submonoid.setLike.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4))) S) M (coeBase.{succ u_1, succ u_1} (coeSort.{succ u_1, succ (succ u_1)} (Submonoid.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4)) Type.{u_1} (SetLike.hasCoeToSort.{u_1, u_1} (Submonoid.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4)) M (Submonoid.setLike.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4))) S) M (coeSubtype.{succ u_1} M (fun (x : M) => Membership.Mem.{u_1, u_1} M (Submonoid.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4)) (SetLike.hasMem.{u_1, u_1} (Submonoid.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4)) M (Submonoid.setLike.{u_1} M (Monoid.toMulOneClass.{u_1} M _inst_4))) x S))))) x) n)
-but is expected to have type
-  forall {M : Type.{u}} {_inst_4 : Type.{v}}, (Nat -> M -> _inst_4) -> Nat -> (List.{u} M) -> (List.{v} _inst_4)
 Case conversion may be inaccurate. Consider using '#align submonoid.coe_pow [anonymous]ₓ'. -/
 @[simp, norm_cast, to_additive]
 theorem [anonymous] {M : Type _} [Monoid M] {S : Submonoid M} (x : S) (n : ℕ) :
@@ -1158,12 +781,6 @@ theorem [anonymous] {M : Type _} [Monoid M] {S : Submonoid M} (x : S) (n : ℕ)
   rfl
 #align submonoid.coe_pow [anonymous]
 
-/- warning: submonoid.to_monoid -> Submonoid.toMonoid is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_4 : Monoid.{u1} M] (S : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_4)), Monoid.{u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_4)) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_4)) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M _inst_4))) S)
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_4 : Monoid.{u1} M] (S : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_4)), Monoid.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_4)) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_4)) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M _inst_4))) x S))
-Case conversion may be inaccurate. Consider using '#align submonoid.to_monoid Submonoid.toMonoidₓ'. -/
 /-- A submonoid of a monoid inherits a monoid structure. -/
 @[to_additive "An `add_submonoid` of an `add_monoid` inherits an `add_monoid`\nstructure."]
 instance toMonoid {M : Type _} [Monoid M] (S : Submonoid M) : Monoid S :=
@@ -1171,12 +788,6 @@ instance toMonoid {M : Type _} [Monoid M] (S : Submonoid M) : Monoid S :=
 #align submonoid.to_monoid Submonoid.toMonoid
 #align add_submonoid.to_add_monoid AddSubmonoid.toAddMonoid
 
-/- warning: submonoid.to_comm_monoid -> Submonoid.toCommMonoid is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_4 : CommMonoid.{u1} M] (S : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_4))), CommMonoid.{u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_4))) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_4))) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_4)))) S)
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_4 : CommMonoid.{u1} M] (S : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_4))), CommMonoid.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_4))) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_4))) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M _inst_4)))) x S))
-Case conversion may be inaccurate. Consider using '#align submonoid.to_comm_monoid Submonoid.toCommMonoidₓ'. -/
 /-- A submonoid of a `comm_monoid` is a `comm_monoid`. -/
 @[to_additive "An `add_submonoid` of an `add_comm_monoid` is\nan `add_comm_monoid`."]
 instance toCommMonoid {M} [CommMonoid M] (S : Submonoid M) : CommMonoid S :=
@@ -1184,12 +795,6 @@ instance toCommMonoid {M} [CommMonoid M] (S : Submonoid M) : CommMonoid S :=
 #align submonoid.to_comm_monoid Submonoid.toCommMonoid
 #align add_submonoid.to_add_comm_monoid AddSubmonoid.toAddCommMonoid
 
-/- warning: submonoid.to_ordered_comm_monoid -> Submonoid.toOrderedCommMonoid is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_4 : OrderedCommMonoid.{u1} M] (S : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M (OrderedCommMonoid.toCommMonoid.{u1} M _inst_4)))), OrderedCommMonoid.{u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M (OrderedCommMonoid.toCommMonoid.{u1} M _inst_4)))) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M (OrderedCommMonoid.toCommMonoid.{u1} M _inst_4)))) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M (OrderedCommMonoid.toCommMonoid.{u1} M _inst_4))))) S)
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_4 : OrderedCommMonoid.{u1} M] (S : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M (OrderedCommMonoid.toCommMonoid.{u1} M _inst_4)))), OrderedCommMonoid.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M (OrderedCommMonoid.toCommMonoid.{u1} M _inst_4)))) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M (OrderedCommMonoid.toCommMonoid.{u1} M _inst_4)))) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M (OrderedCommMonoid.toCommMonoid.{u1} M _inst_4))))) x S))
-Case conversion may be inaccurate. Consider using '#align submonoid.to_ordered_comm_monoid Submonoid.toOrderedCommMonoidₓ'. -/
 /-- A submonoid of an `ordered_comm_monoid` is an `ordered_comm_monoid`. -/
 @[to_additive
       "An `add_submonoid` of an `ordered_add_comm_monoid` is\nan `ordered_add_comm_monoid`."]
@@ -1198,12 +803,6 @@ instance toOrderedCommMonoid {M} [OrderedCommMonoid M] (S : Submonoid M) : Order
 #align submonoid.to_ordered_comm_monoid Submonoid.toOrderedCommMonoid
 #align add_submonoid.to_ordered_add_comm_monoid AddSubmonoid.toOrderedAddCommMonoid
 
-/- warning: submonoid.to_linear_ordered_comm_monoid -> Submonoid.toLinearOrderedCommMonoid is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_4 : LinearOrderedCommMonoid.{u1} M] (S : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M (OrderedCommMonoid.toCommMonoid.{u1} M (LinearOrderedCommMonoid.toOrderedCommMonoid.{u1} M _inst_4))))), LinearOrderedCommMonoid.{u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M (OrderedCommMonoid.toCommMonoid.{u1} M (LinearOrderedCommMonoid.toOrderedCommMonoid.{u1} M _inst_4))))) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M (OrderedCommMonoid.toCommMonoid.{u1} M (LinearOrderedCommMonoid.toOrderedCommMonoid.{u1} M _inst_4))))) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M (OrderedCommMonoid.toCommMonoid.{u1} M (LinearOrderedCommMonoid.toOrderedCommMonoid.{u1} M _inst_4)))))) S)
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_4 : LinearOrderedCommMonoid.{u1} M] (S : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M (LinearOrderedCommMonoid.toCommMonoid.{u1} M _inst_4)))), LinearOrderedCommMonoid.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M (LinearOrderedCommMonoid.toCommMonoid.{u1} M _inst_4)))) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M (LinearOrderedCommMonoid.toCommMonoid.{u1} M _inst_4)))) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M (CommMonoid.toMonoid.{u1} M (LinearOrderedCommMonoid.toCommMonoid.{u1} M _inst_4))))) x S))
-Case conversion may be inaccurate. Consider using '#align submonoid.to_linear_ordered_comm_monoid Submonoid.toLinearOrderedCommMonoidₓ'. -/
 /-- A submonoid of a `linear_ordered_comm_monoid` is a `linear_ordered_comm_monoid`. -/
 @[to_additive
       "An `add_submonoid` of a `linear_ordered_add_comm_monoid` is\na `linear_ordered_add_comm_monoid`."]
@@ -1214,12 +813,6 @@ instance toLinearOrderedCommMonoid {M} [LinearOrderedCommMonoid M] (S : Submonoi
 #align submonoid.to_linear_ordered_comm_monoid Submonoid.toLinearOrderedCommMonoid
 #align add_submonoid.to_linear_ordered_add_comm_monoid AddSubmonoid.toLinearOrderedAddCommMonoid
 
-/- warning: submonoid.to_ordered_cancel_comm_monoid -> Submonoid.toOrderedCancelCommMonoid is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_4 : OrderedCancelCommMonoid.{u1} M] (S : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (RightCancelMonoid.toMonoid.{u1} M (CancelMonoid.toRightCancelMonoid.{u1} M (CancelCommMonoid.toCancelMonoid.{u1} M (OrderedCancelCommMonoid.toCancelCommMonoid.{u1} M _inst_4)))))), OrderedCancelCommMonoid.{u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (RightCancelMonoid.toMonoid.{u1} M (CancelMonoid.toRightCancelMonoid.{u1} M (CancelCommMonoid.toCancelMonoid.{u1} M (OrderedCancelCommMonoid.toCancelCommMonoid.{u1} M _inst_4)))))) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (RightCancelMonoid.toMonoid.{u1} M (CancelMonoid.toRightCancelMonoid.{u1} M (CancelCommMonoid.toCancelMonoid.{u1} M (OrderedCancelCommMonoid.toCancelCommMonoid.{u1} M _inst_4)))))) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M (RightCancelMonoid.toMonoid.{u1} M (CancelMonoid.toRightCancelMonoid.{u1} M (CancelCommMonoid.toCancelMonoid.{u1} M (OrderedCancelCommMonoid.toCancelCommMonoid.{u1} M _inst_4))))))) S)
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_4 : OrderedCancelCommMonoid.{u1} M] (S : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (RightCancelMonoid.toMonoid.{u1} M (CancelMonoid.toRightCancelMonoid.{u1} M (CancelCommMonoid.toCancelMonoid.{u1} M (OrderedCancelCommMonoid.toCancelCommMonoid.{u1} M _inst_4)))))), OrderedCancelCommMonoid.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (RightCancelMonoid.toMonoid.{u1} M (CancelMonoid.toRightCancelMonoid.{u1} M (CancelCommMonoid.toCancelMonoid.{u1} M (OrderedCancelCommMonoid.toCancelCommMonoid.{u1} M _inst_4)))))) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (RightCancelMonoid.toMonoid.{u1} M (CancelMonoid.toRightCancelMonoid.{u1} M (CancelCommMonoid.toCancelMonoid.{u1} M (OrderedCancelCommMonoid.toCancelCommMonoid.{u1} M _inst_4)))))) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M (RightCancelMonoid.toMonoid.{u1} M (CancelMonoid.toRightCancelMonoid.{u1} M (CancelCommMonoid.toCancelMonoid.{u1} M (OrderedCancelCommMonoid.toCancelCommMonoid.{u1} M _inst_4))))))) x S))
-Case conversion may be inaccurate. Consider using '#align submonoid.to_ordered_cancel_comm_monoid Submonoid.toOrderedCancelCommMonoidₓ'. -/
 /-- A submonoid of an `ordered_cancel_comm_monoid` is an `ordered_cancel_comm_monoid`. -/
 @[to_additive
       "An `add_submonoid` of an `ordered_cancel_add_comm_monoid` is\nan `ordered_cancel_add_comm_monoid`."]
@@ -1229,12 +822,6 @@ instance toOrderedCancelCommMonoid {M} [OrderedCancelCommMonoid M] (S : Submonoi
 #align submonoid.to_ordered_cancel_comm_monoid Submonoid.toOrderedCancelCommMonoid
 #align add_submonoid.to_ordered_cancel_add_comm_monoid AddSubmonoid.toOrderedCancelAddCommMonoid
 
-/- warning: submonoid.to_linear_ordered_cancel_comm_monoid -> Submonoid.toLinearOrderedCancelCommMonoid is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_4 : LinearOrderedCancelCommMonoid.{u1} M] (S : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (RightCancelMonoid.toMonoid.{u1} M (CancelMonoid.toRightCancelMonoid.{u1} M (CancelCommMonoid.toCancelMonoid.{u1} M (OrderedCancelCommMonoid.toCancelCommMonoid.{u1} M (LinearOrderedCancelCommMonoid.toOrderedCancelCommMonoid.{u1} M _inst_4))))))), LinearOrderedCancelCommMonoid.{u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (RightCancelMonoid.toMonoid.{u1} M (CancelMonoid.toRightCancelMonoid.{u1} M (CancelCommMonoid.toCancelMonoid.{u1} M (OrderedCancelCommMonoid.toCancelCommMonoid.{u1} M (LinearOrderedCancelCommMonoid.toOrderedCancelCommMonoid.{u1} M _inst_4))))))) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (RightCancelMonoid.toMonoid.{u1} M (CancelMonoid.toRightCancelMonoid.{u1} M (CancelCommMonoid.toCancelMonoid.{u1} M (OrderedCancelCommMonoid.toCancelCommMonoid.{u1} M (LinearOrderedCancelCommMonoid.toOrderedCancelCommMonoid.{u1} M _inst_4))))))) M (Submonoid.setLike.{u1} M (Monoid.toMulOneClass.{u1} M (RightCancelMonoid.toMonoid.{u1} M (CancelMonoid.toRightCancelMonoid.{u1} M (CancelCommMonoid.toCancelMonoid.{u1} M (OrderedCancelCommMonoid.toCancelCommMonoid.{u1} M (LinearOrderedCancelCommMonoid.toOrderedCancelCommMonoid.{u1} M _inst_4)))))))) S)
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_4 : LinearOrderedCancelCommMonoid.{u1} M] (S : Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (RightCancelMonoid.toMonoid.{u1} M (CancelMonoid.toRightCancelMonoid.{u1} M (CancelCommMonoid.toCancelMonoid.{u1} M (OrderedCancelCommMonoid.toCancelCommMonoid.{u1} M (LinearOrderedCancelCommMonoid.toOrderedCancelCommMonoid.{u1} M _inst_4))))))), LinearOrderedCancelCommMonoid.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (RightCancelMonoid.toMonoid.{u1} M (CancelMonoid.toRightCancelMonoid.{u1} M (CancelCommMonoid.toCancelMonoid.{u1} M (OrderedCancelCommMonoid.toCancelCommMonoid.{u1} M (LinearOrderedCancelCommMonoid.toOrderedCancelCommMonoid.{u1} M _inst_4))))))) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M (Monoid.toMulOneClass.{u1} M (RightCancelMonoid.toMonoid.{u1} M (CancelMonoid.toRightCancelMonoid.{u1} M (CancelCommMonoid.toCancelMonoid.{u1} M (OrderedCancelCommMonoid.toCancelCommMonoid.{u1} M (LinearOrderedCancelCommMonoid.toOrderedCancelCommMonoid.{u1} M _inst_4))))))) M (Submonoid.instSetLikeSubmonoid.{u1} M (Monoid.toMulOneClass.{u1} M (RightCancelMonoid.toMonoid.{u1} M (CancelMonoid.toRightCancelMonoid.{u1} M (CancelCommMonoid.toCancelMonoid.{u1} M (OrderedCancelCommMonoid.toCancelCommMonoid.{u1} M (LinearOrderedCancelCommMonoid.toOrderedCancelCommMonoid.{u1} M _inst_4)))))))) x S))
-Case conversion may be inaccurate. Consider using '#align submonoid.to_linear_ordered_cancel_comm_monoid Submonoid.toLinearOrderedCancelCommMonoidₓ'. -/
 /-- A submonoid of a `linear_ordered_cancel_comm_monoid` is a `linear_ordered_cancel_comm_monoid`.
 -/
 @[to_additive
@@ -1246,12 +833,6 @@ instance toLinearOrderedCancelCommMonoid {M} [LinearOrderedCancelCommMonoid M] (
 #align submonoid.to_linear_ordered_cancel_comm_monoid Submonoid.toLinearOrderedCancelCommMonoid
 #align add_submonoid.to_linear_ordered_cancel_add_comm_monoid AddSubmonoid.toLinearOrderedCancelAddCommMonoid
 
-/- warning: submonoid.subtype -> Submonoid.subtype is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1), MonoidHom.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1), MonoidHom.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1
-Case conversion may be inaccurate. Consider using '#align submonoid.subtype Submonoid.subtypeₓ'. -/
 /-- The natural monoid hom from a submonoid of monoid `M` to `M`. -/
 @[to_additive "The natural monoid hom from an `add_submonoid` of `add_monoid` `M` to `M`."]
 def subtype : S →* M :=
@@ -1259,24 +840,12 @@ def subtype : S →* M :=
 #align submonoid.subtype Submonoid.subtype
 #align add_submonoid.subtype AddSubmonoid.subtype
 
-/- warning: submonoid.coe_subtype -> Submonoid.coe_subtype is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1), Eq.{succ u1} ((coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) -> M) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) (fun (_x : MonoidHom.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) => (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) -> M) (MonoidHom.hasCoeToFun.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) (Submonoid.subtype.{u1} M _inst_1 S)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S))))))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1), Eq.{succ u1} (forall (ᾰ : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) => M) ᾰ) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (fun (_x : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (MulOneClass.toMul.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u1} M _inst_1 S)) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1 (MonoidHom.monoidHomClass.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1))) (Submonoid.subtype.{u1} M _inst_1 S)) (Subtype.val.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S))
-Case conversion may be inaccurate. Consider using '#align submonoid.coe_subtype Submonoid.coe_subtypeₓ'. -/
 @[simp, to_additive]
 theorem coe_subtype : ⇑S.Subtype = coe :=
   rfl
 #align submonoid.coe_subtype Submonoid.coe_subtype
 #align add_submonoid.coe_subtype AddSubmonoid.coe_subtype
 
-/- warning: submonoid.top_equiv -> Submonoid.topEquiv is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M], MulEquiv.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) (Top.top.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasTop.{u1} M _inst_1))) M (Submonoid.mul.{u1} M _inst_1 (Top.top.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasTop.{u1} M _inst_1))) (MulOneClass.toHasMul.{u1} M _inst_1)
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M], MulEquiv.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x (Top.top.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instTopSubmonoid.{u1} M _inst_1)))) M (Submonoid.mul.{u1} M _inst_1 (Top.top.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instTopSubmonoid.{u1} M _inst_1))) (MulOneClass.toMul.{u1} M _inst_1)
-Case conversion may be inaccurate. Consider using '#align submonoid.top_equiv Submonoid.topEquivₓ'. -/
 /-- The top submonoid is isomorphic to the monoid. -/
 @[to_additive "The top additive submonoid is isomorphic to the additive monoid.", simps]
 def topEquiv : (⊤ : Submonoid M) ≃* M where
@@ -1288,24 +857,12 @@ def topEquiv : (⊤ : Submonoid M) ≃* M where
 #align submonoid.top_equiv Submonoid.topEquiv
 #align add_submonoid.top_equiv AddSubmonoid.topEquiv
 
-/- warning: submonoid.top_equiv_to_monoid_hom -> Submonoid.topEquiv_toMonoidHom is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M], Eq.{succ u1} (MonoidHom.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) (Top.top.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasTop.{u1} M _inst_1))) M (Submonoid.toMulOneClass.{u1} M _inst_1 (Top.top.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasTop.{u1} M _inst_1))) _inst_1) (MulEquiv.toMonoidHom.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) (Top.top.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasTop.{u1} M _inst_1))) M (Submonoid.toMulOneClass.{u1} M _inst_1 (Top.top.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasTop.{u1} M _inst_1))) _inst_1 (Submonoid.topEquiv.{u1} M _inst_1)) (Submonoid.subtype.{u1} M _inst_1 (Top.top.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasTop.{u1} M _inst_1)))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M], Eq.{succ u1} (MonoidHom.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x (Top.top.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instTopSubmonoid.{u1} M _inst_1)))) M (Submonoid.toMulOneClass.{u1} M _inst_1 (Top.top.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instTopSubmonoid.{u1} M _inst_1))) _inst_1) (MulEquiv.toMonoidHom.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x (Top.top.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instTopSubmonoid.{u1} M _inst_1)))) M (Submonoid.toMulOneClass.{u1} M _inst_1 (Top.top.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instTopSubmonoid.{u1} M _inst_1))) _inst_1 (Submonoid.topEquiv.{u1} M _inst_1)) (Submonoid.subtype.{u1} M _inst_1 (Top.top.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instTopSubmonoid.{u1} M _inst_1)))
-Case conversion may be inaccurate. Consider using '#align submonoid.top_equiv_to_monoid_hom Submonoid.topEquiv_toMonoidHomₓ'. -/
 @[simp, to_additive]
 theorem topEquiv_toMonoidHom : (topEquiv : _ ≃* M).toMonoidHom = (⊤ : Submonoid M).Subtype :=
   rfl
 #align submonoid.top_equiv_to_monoid_hom Submonoid.topEquiv_toMonoidHom
 #align add_submonoid.top_equiv_to_add_monoid_hom AddSubmonoid.topEquiv_toAddMonoidHom
 
-/- warning: submonoid.equiv_map_of_injective -> Submonoid.equivMapOfInjective 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] (S : Submonoid.{u1} M _inst_1) (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), (Function.Injective.{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)) -> (MulEquiv.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)))
-but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (S : Submonoid.{u1} M _inst_1) (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), (Function.Injective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, 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 u1 u2, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u1 u2, 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))) f)) -> (MulEquiv.{u1, u2} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)))
-Case conversion may be inaccurate. Consider using '#align submonoid.equiv_map_of_injective Submonoid.equivMapOfInjectiveₓ'. -/
 /-- A subgroup is isomorphic to its image under an injective function. If you have an isomorphism,
 use `mul_equiv.submonoid_map` for better definitional equalities. -/
 @[to_additive
@@ -1315,9 +872,6 @@ noncomputable def equivMapOfInjective (f : M →* N) (hf : Function.Injective f)
 #align submonoid.equiv_map_of_injective Submonoid.equivMapOfInjective
 #align add_submonoid.equiv_map_of_injective AddSubmonoid.equivMapOfInjective
 
-/- warning: submonoid.coe_equiv_map_of_injective_apply -> Submonoid.coe_equivMapOfInjective_apply is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align submonoid.coe_equiv_map_of_injective_apply Submonoid.coe_equivMapOfInjective_applyₓ'. -/
 @[simp, to_additive]
 theorem coe_equivMapOfInjective_apply (f : M →* N) (hf : Function.Injective f) (x : S) :
     (equivMapOfInjective S f hf x : N) = f x :=
@@ -1325,12 +879,6 @@ theorem coe_equivMapOfInjective_apply (f : M →* N) (hf : Function.Injective f)
 #align submonoid.coe_equiv_map_of_injective_apply Submonoid.coe_equivMapOfInjective_apply
 #align add_submonoid.coe_equiv_map_of_injective_apply AddSubmonoid.coe_equivMapOfInjective_apply
 
-/- warning: submonoid.closure_closure_coe_preimage -> Submonoid.closure_closure_coe_preimage is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {s : Set.{u1} M}, Eq.{succ u1} (Submonoid.{u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) (Submonoid.closure.{u1} M _inst_1 s)) (Submonoid.toMulOneClass.{u1} M _inst_1 (Submonoid.closure.{u1} M _inst_1 s))) (Submonoid.closure.{u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) (Submonoid.closure.{u1} M _inst_1 s)) (Submonoid.toMulOneClass.{u1} M _inst_1 (Submonoid.closure.{u1} M _inst_1 s)) (Set.preimage.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) (Submonoid.closure.{u1} M _inst_1 s)) M ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) (Submonoid.closure.{u1} M _inst_1 s)) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) (Submonoid.closure.{u1} M _inst_1 s)) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) (Submonoid.closure.{u1} M _inst_1 s)) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) (Submonoid.closure.{u1} M _inst_1 s)) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x (Submonoid.closure.{u1} M _inst_1 s))))))) s)) (Top.top.{u1} (Submonoid.{u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) (Submonoid.closure.{u1} M _inst_1 s)) (Submonoid.toMulOneClass.{u1} M _inst_1 (Submonoid.closure.{u1} M _inst_1 s))) (Submonoid.hasTop.{u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) (Submonoid.closure.{u1} M _inst_1 s)) (Submonoid.toMulOneClass.{u1} M _inst_1 (Submonoid.closure.{u1} M _inst_1 s))))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {s : Set.{u1} M}, Eq.{succ u1} (Submonoid.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) x (SetLike.coe.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1) (Submonoid.closure.{u1} M _inst_1 s)))) (Submonoid.toMulOneClass.{u1} M _inst_1 (Submonoid.closure.{u1} M _inst_1 s))) (Submonoid.closure.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) x (SetLike.coe.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1) (Submonoid.closure.{u1} M _inst_1 s)))) (Submonoid.toMulOneClass.{u1} M _inst_1 (Submonoid.closure.{u1} M _inst_1 s)) (Set.preimage.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) x (SetLike.coe.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1) (Submonoid.closure.{u1} M _inst_1 s)))) M (Subtype.val.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) x (SetLike.coe.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1) (Submonoid.closure.{u1} M _inst_1 s)))) s)) (Top.top.{u1} (Submonoid.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) x (SetLike.coe.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1) (Submonoid.closure.{u1} M _inst_1 s)))) (Submonoid.toMulOneClass.{u1} M _inst_1 (Submonoid.closure.{u1} M _inst_1 s))) (Submonoid.instTopSubmonoid.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) x (SetLike.coe.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1) (Submonoid.closure.{u1} M _inst_1 s)))) (Submonoid.toMulOneClass.{u1} M _inst_1 (Submonoid.closure.{u1} M _inst_1 s))))
-Case conversion may be inaccurate. Consider using '#align submonoid.closure_closure_coe_preimage Submonoid.closure_closure_coe_preimageₓ'. -/
 @[simp, to_additive]
 theorem closure_closure_coe_preimage {s : Set M} : closure ((coe : closure s → M) ⁻¹' s) = ⊤ :=
   eq_top_iff.2 fun x =>
@@ -1343,12 +891,6 @@ theorem closure_closure_coe_preimage {s : Set M} : closure ((coe : closure s →
 #align submonoid.closure_closure_coe_preimage Submonoid.closure_closure_coe_preimage
 #align add_submonoid.closure_closure_coe_preimage AddSubmonoid.closure_closure_coe_preimage
 
-/- warning: submonoid.prod -> Submonoid.prod 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], (Submonoid.{u1} M _inst_1) -> (Submonoid.{u2} N _inst_2) -> (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2))
-but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N], (Submonoid.{u1} M _inst_1) -> (Submonoid.{u2} N _inst_2) -> (Submonoid.{max u2 u1} (Prod.{u1, u2} M N) (Prod.instMulOneClassProd.{u1, u2} M N _inst_1 _inst_2))
-Case conversion may be inaccurate. Consider using '#align submonoid.prod Submonoid.prodₓ'. -/
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
 /-- Given `submonoid`s `s`, `t` of monoids `M`, `N` respectively, `s × t` as a submonoid
 of `M × N`. -/
@@ -1362,12 +904,6 @@ def prod (s : Submonoid M) (t : Submonoid N) : Submonoid (M × N)
 #align submonoid.prod Submonoid.prod
 #align add_submonoid.prod AddSubmonoid.prod
 
-/- warning: submonoid.coe_prod -> Submonoid.coe_prod 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] (s : Submonoid.{u1} M _inst_1) (t : Submonoid.{u2} N _inst_2), Eq.{succ (max u1 u2)} (Set.{max u1 u2} (Prod.{u1, u2} M N)) ((fun (a : Type.{max u1 u2}) (b : Type.{max u1 u2}) [self : HasLiftT.{succ (max u1 u2), succ (max u1 u2)} a b] => self.0) (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Set.{max u1 u2} (Prod.{u1, u2} M N)) (HasLiftT.mk.{succ (max u1 u2), succ (max u1 u2)} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Set.{max u1 u2} (Prod.{u1, u2} M N)) (CoeTCₓ.coe.{succ (max u1 u2), succ (max u1 u2)} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Set.{max u1 u2} (Prod.{u1, u2} M N)) (SetLike.Set.hasCoeT.{max u1 u2, max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Prod.{u1, u2} M N) (Submonoid.setLike.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2))))) (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 s t)) (Set.prod.{u1, u2} M N ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) s) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Submonoid.{u2} N _inst_2) (Set.{u2} N) (HasLiftT.mk.{succ u2, succ u2} (Submonoid.{u2} N _inst_2) (Set.{u2} N) (CoeTCₓ.coe.{succ u2, succ u2} (Submonoid.{u2} N _inst_2) (Set.{u2} N) (SetLike.Set.hasCoeT.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) t))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (s : Submonoid.{u2} M _inst_1) (t : Submonoid.{u1} N _inst_2), Eq.{max (succ u2) (succ u1)} (Set.{max u2 u1} (Prod.{u2, u1} M N)) (SetLike.coe.{max u2 u1, max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Prod.{u2, u1} M N) (Submonoid.instSetLikeSubmonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Submonoid.prod.{u2, u1} M N _inst_1 _inst_2 s t)) (Set.prod.{u2, u1} M N (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) s) (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) t))
-Case conversion may be inaccurate. Consider using '#align submonoid.coe_prod Submonoid.coe_prodₓ'. -/
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
 @[to_additive coe_prod]
 theorem coe_prod (s : Submonoid M) (t : Submonoid N) : (s.Prod t : Set (M × N)) = s ×ˢ t :=
@@ -1375,12 +911,6 @@ theorem coe_prod (s : Submonoid M) (t : Submonoid N) : (s.Prod t : Set (M × N))
 #align submonoid.coe_prod Submonoid.coe_prod
 #align add_submonoid.coe_prod AddSubmonoid.coe_prod
 
-/- warning: submonoid.mem_prod -> Submonoid.mem_prod 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] {s : Submonoid.{u1} M _inst_1} {t : Submonoid.{u2} N _inst_2} {p : Prod.{u1, u2} M N}, Iff (Membership.Mem.{max u1 u2, max u1 u2} (Prod.{u1, u2} M N) (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (SetLike.hasMem.{max u1 u2, max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Prod.{u1, u2} M N) (Submonoid.setLike.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2))) p (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 s t)) (And (Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) (Prod.fst.{u1, u2} M N p) s) (Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Prod.snd.{u1, u2} M N p) t))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {s : Submonoid.{u2} M _inst_1} {t : Submonoid.{u1} N _inst_2} {p : Prod.{u2, u1} M N}, Iff (Membership.mem.{max u2 u1, max u2 u1} (Prod.{u2, u1} M N) (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (SetLike.instMembership.{max u2 u1, max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Prod.{u2, u1} M N) (Submonoid.instSetLikeSubmonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2))) p (Submonoid.prod.{u2, u1} M N _inst_1 _inst_2 s t)) (And (Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) (Prod.fst.{u2, u1} M N p) s) (Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) (Prod.snd.{u2, u1} M N p) t))
-Case conversion may be inaccurate. Consider using '#align submonoid.mem_prod Submonoid.mem_prodₓ'. -/
 @[to_additive mem_prod]
 theorem mem_prod {s : Submonoid M} {t : Submonoid N} {p : M × N} :
     p ∈ s.Prod t ↔ p.1 ∈ s ∧ p.2 ∈ t :=
@@ -1388,12 +918,6 @@ theorem mem_prod {s : Submonoid M} {t : Submonoid N} {p : M × N} :
 #align submonoid.mem_prod Submonoid.mem_prod
 #align add_submonoid.mem_prod AddSubmonoid.mem_prod
 
-/- warning: submonoid.prod_mono -> Submonoid.prod_mono 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] {s₁ : Submonoid.{u1} M _inst_1} {s₂ : Submonoid.{u1} M _inst_1} {t₁ : Submonoid.{u2} N _inst_2} {t₂ : Submonoid.{u2} N _inst_2}, (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) s₁ s₂) -> (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) t₁ t₂) -> (LE.le.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Preorder.toHasLe.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (SetLike.partialOrder.{max u1 u2, max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Prod.{u1, u2} M N) (Submonoid.setLike.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2))))) (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 s₁ t₁) (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 s₂ t₂))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {s₁ : Submonoid.{u2} M _inst_1} {s₂ : Submonoid.{u2} M _inst_1} {t₁ : Submonoid.{u1} N _inst_2} {t₂ : Submonoid.{u1} N _inst_2}, (LE.le.{u2} (Submonoid.{u2} M _inst_1) (Preorder.toLE.{u2} (Submonoid.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1))))) s₁ s₂) -> (LE.le.{u1} (Submonoid.{u1} N _inst_2) (Preorder.toLE.{u1} (Submonoid.{u1} N _inst_2) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u1} N _inst_2))))) t₁ t₂) -> (LE.le.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Preorder.toLE.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (CompleteSemilatticeInf.toPartialOrder.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (CompleteLattice.toCompleteSemilatticeInf.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Submonoid.instCompleteLatticeSubmonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)))))) (Submonoid.prod.{u2, u1} M N _inst_1 _inst_2 s₁ t₁) (Submonoid.prod.{u2, u1} M N _inst_1 _inst_2 s₂ t₂))
-Case conversion may be inaccurate. Consider using '#align submonoid.prod_mono Submonoid.prod_monoₓ'. -/
 @[to_additive prod_mono]
 theorem prod_mono {s₁ s₂ : Submonoid M} {t₁ t₂ : Submonoid N} (hs : s₁ ≤ s₂) (ht : t₁ ≤ t₂) :
     s₁.Prod t₁ ≤ s₂.Prod t₂ :=
@@ -1401,60 +925,30 @@ theorem prod_mono {s₁ s₂ : Submonoid M} {t₁ t₂ : Submonoid N} (hs : s₁
 #align submonoid.prod_mono Submonoid.prod_mono
 #align add_submonoid.prod_mono AddSubmonoid.prod_mono
 
-/- warning: submonoid.prod_top -> Submonoid.prod_top 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] (s : Submonoid.{u1} M _inst_1), Eq.{succ (max u1 u2)} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 s (Top.top.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasTop.{u2} N _inst_2))) (Submonoid.comap.{max u1 u2, u1, max u1 u2} (Prod.{u1, u2} M N) M (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_1 (MonoidHom.{max u1 u2, u1} (Prod.{u1, u2} M N) M (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_1) (MonoidHom.monoidHomClass.{max u1 u2, u1} (Prod.{u1, u2} M N) M (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_1) (MonoidHom.fst.{u1, u2} M N _inst_1 _inst_2) s)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (s : Submonoid.{u2} M _inst_1), Eq.{max (succ u2) (succ u1)} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Submonoid.prod.{u2, u1} M N _inst_1 _inst_2 s (Top.top.{u1} (Submonoid.{u1} N _inst_2) (Submonoid.instTopSubmonoid.{u1} N _inst_2))) (Submonoid.comap.{max u2 u1, u2, max u2 u1} (Prod.{u2, u1} M N) M (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) _inst_1 (MonoidHom.{max u1 u2, u2} (Prod.{u2, u1} M N) M (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) _inst_1) (MonoidHom.monoidHomClass.{max u2 u1, u2} (Prod.{u2, u1} M N) M (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) _inst_1) (MonoidHom.fst.{u2, u1} M N _inst_1 _inst_2) s)
-Case conversion may be inaccurate. Consider using '#align submonoid.prod_top Submonoid.prod_topₓ'. -/
 @[to_additive prod_top]
 theorem prod_top (s : Submonoid M) : s.Prod (⊤ : Submonoid N) = s.comap (MonoidHom.fst M N) :=
   ext fun x => by simp [mem_prod, MonoidHom.coe_fst]
 #align submonoid.prod_top Submonoid.prod_top
 #align add_submonoid.prod_top AddSubmonoid.prod_top
 
-/- warning: submonoid.top_prod -> Submonoid.top_prod 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] (s : Submonoid.{u2} N _inst_2), Eq.{succ (max u1 u2)} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 (Top.top.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasTop.{u1} M _inst_1)) s) (Submonoid.comap.{max u1 u2, u2, max u1 u2} (Prod.{u1, u2} M N) N (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_2 (MonoidHom.{max u1 u2, u2} (Prod.{u1, u2} M N) N (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_2) (MonoidHom.monoidHomClass.{max u1 u2, u2} (Prod.{u1, u2} M N) N (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_2) (MonoidHom.snd.{u1, u2} M N _inst_1 _inst_2) s)
-but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (s : Submonoid.{u2} N _inst_2), Eq.{max (succ u1) (succ u2)} (Submonoid.{max u2 u1} (Prod.{u1, u2} M N) (Prod.instMulOneClassProd.{u1, u2} M N _inst_1 _inst_2)) (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 (Top.top.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instTopSubmonoid.{u1} M _inst_1)) s) (Submonoid.comap.{max u1 u2, u2, max u1 u2} (Prod.{u1, u2} M N) N (Prod.instMulOneClassProd.{u1, u2} M N _inst_1 _inst_2) _inst_2 (MonoidHom.{max u2 u1, u2} (Prod.{u1, u2} M N) N (Prod.instMulOneClassProd.{u1, u2} M N _inst_1 _inst_2) _inst_2) (MonoidHom.monoidHomClass.{max u1 u2, u2} (Prod.{u1, u2} M N) N (Prod.instMulOneClassProd.{u1, u2} M N _inst_1 _inst_2) _inst_2) (MonoidHom.snd.{u1, u2} M N _inst_1 _inst_2) s)
-Case conversion may be inaccurate. Consider using '#align submonoid.top_prod Submonoid.top_prodₓ'. -/
 @[to_additive top_prod]
 theorem top_prod (s : Submonoid N) : (⊤ : Submonoid M).Prod s = s.comap (MonoidHom.snd M N) :=
   ext fun x => by simp [mem_prod, MonoidHom.coe_snd]
 #align submonoid.top_prod Submonoid.top_prod
 #align add_submonoid.top_prod AddSubmonoid.top_prod
 
-/- warning: submonoid.top_prod_top -> Submonoid.top_prod_top 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], Eq.{succ (max u1 u2)} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 (Top.top.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasTop.{u1} M _inst_1)) (Top.top.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasTop.{u2} N _inst_2))) (Top.top.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Submonoid.hasTop.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{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], Eq.{max (succ u2) (succ u1)} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Submonoid.prod.{u2, u1} M N _inst_1 _inst_2 (Top.top.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instTopSubmonoid.{u2} M _inst_1)) (Top.top.{u1} (Submonoid.{u1} N _inst_2) (Submonoid.instTopSubmonoid.{u1} N _inst_2))) (Top.top.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Submonoid.instTopSubmonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)))
-Case conversion may be inaccurate. Consider using '#align submonoid.top_prod_top Submonoid.top_prod_topₓ'. -/
 @[simp, to_additive top_prod_top]
 theorem top_prod_top : (⊤ : Submonoid M).Prod (⊤ : Submonoid N) = ⊤ :=
   (top_prod _).trans <| comap_top _
 #align submonoid.top_prod_top Submonoid.top_prod_top
 #align add_submonoid.top_prod_top AddSubmonoid.top_prod_top
 
-/- warning: submonoid.bot_prod_bot -> Submonoid.bot_prod_bot 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], Eq.{succ (max u1 u2)} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 (Bot.bot.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasBot.{u1} M _inst_1)) (Bot.bot.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasBot.{u2} N _inst_2))) (Bot.bot.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Submonoid.hasBot.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{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], Eq.{max (succ u2) (succ u1)} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Submonoid.prod.{u2, u1} M N _inst_1 _inst_2 (Bot.bot.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instBotSubmonoid.{u2} M _inst_1)) (Bot.bot.{u1} (Submonoid.{u1} N _inst_2) (Submonoid.instBotSubmonoid.{u1} N _inst_2))) (Bot.bot.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Submonoid.instBotSubmonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)))
-Case conversion may be inaccurate. Consider using '#align submonoid.bot_prod_bot Submonoid.bot_prod_botₓ'. -/
 @[to_additive]
 theorem bot_prod_bot : (⊥ : Submonoid M).Prod (⊥ : Submonoid N) = ⊥ :=
   SetLike.coe_injective <| by simp [coe_prod, Prod.one_eq_mk]
 #align submonoid.bot_prod_bot Submonoid.bot_prod_bot
 #align add_submonoid.bot_sum_bot AddSubmonoid.bot_prod_bot
 
-/- warning: submonoid.prod_equiv -> Submonoid.prodEquiv 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] (s : Submonoid.{u1} M _inst_1) (t : Submonoid.{u2} N _inst_2), MulEquiv.{max u1 u2, max u1 u2} (coeSort.{succ (max u1 u2), succ (succ (max u1 u2))} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) Type.{max u1 u2} (SetLike.hasCoeToSort.{max u1 u2, max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Prod.{u1, u2} M N) (Submonoid.setLike.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2))) (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 s t)) (Prod.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) s) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) t)) (Submonoid.mul.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 s t)) (Prod.hasMul.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) s) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) t) (Submonoid.mul.{u1} M _inst_1 s) (Submonoid.mul.{u2} N _inst_2 t))
-but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (s : Submonoid.{u1} M _inst_1) (t : Submonoid.{u2} N _inst_2), MulEquiv.{max u1 u2, max u2 u1} (Subtype.{succ (max u1 u2)} (Prod.{u1, u2} M N) (fun (x : Prod.{u1, u2} M N) => Membership.mem.{max u1 u2, max u1 u2} (Prod.{u1, u2} M N) (Submonoid.{max u2 u1} (Prod.{u1, u2} M N) (Prod.instMulOneClassProd.{u1, u2} M N _inst_1 _inst_2)) (SetLike.instMembership.{max u1 u2, max u1 u2} (Submonoid.{max u2 u1} (Prod.{u1, u2} M N) (Prod.instMulOneClassProd.{u1, u2} M N _inst_1 _inst_2)) (Prod.{u1, u2} M N) (Submonoid.instSetLikeSubmonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.instMulOneClassProd.{u1, u2} M N _inst_1 _inst_2))) x (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 s t))) (Prod.{u1, u2} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x s)) (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) x t))) (Submonoid.mul.{max u1 u2} (Prod.{u1, u2} M N) (Prod.instMulOneClassProd.{u1, u2} M N _inst_1 _inst_2) (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 s t)) (Prod.instMulProd.{u1, u2} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x s)) (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) x t)) (Submonoid.mul.{u1} M _inst_1 s) (Submonoid.mul.{u2} N _inst_2 t))
-Case conversion may be inaccurate. Consider using '#align submonoid.prod_equiv Submonoid.prodEquivₓ'. -/
 /-- The product of submonoids is isomorphic to their product as monoids. -/
 @[to_additive prod_equiv
       "The product of additive submonoids is isomorphic to their product\nas additive monoids"]
@@ -1465,12 +959,6 @@ def prodEquiv (s : Submonoid M) (t : Submonoid N) : s.Prod t ≃* s × t :=
 
 open MonoidHom
 
-/- warning: submonoid.map_inl -> Submonoid.map_inl 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] (s : Submonoid.{u1} M _inst_1), Eq.{succ (max u1 u2)} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Submonoid.map.{u1, max u1 u2, max u1 u2} M (Prod.{u1, u2} M N) _inst_1 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.{u1, max u1 u2} M (Prod.{u1, u2} M N) _inst_1 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u1, max u1 u2} M (Prod.{u1, u2} M N) _inst_1 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.inl.{u1, u2} M N _inst_1 _inst_2) s) (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 s (Bot.bot.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasBot.{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] (s : Submonoid.{u2} M _inst_1), Eq.{max (succ u2) (succ u1)} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Submonoid.map.{u2, max u2 u1, max u2 u1} M (Prod.{u2, u1} M N) _inst_1 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.{u2, max u1 u2} M (Prod.{u2, u1} M N) _inst_1 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u2, max u2 u1} M (Prod.{u2, u1} M N) _inst_1 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.inl.{u2, u1} M N _inst_1 _inst_2) s) (Submonoid.prod.{u2, u1} M N _inst_1 _inst_2 s (Bot.bot.{u1} (Submonoid.{u1} N _inst_2) (Submonoid.instBotSubmonoid.{u1} N _inst_2)))
-Case conversion may be inaccurate. Consider using '#align submonoid.map_inl Submonoid.map_inlₓ'. -/
 @[to_additive]
 theorem map_inl (s : Submonoid M) : s.map (inl M N) = s.Prod ⊥ :=
   ext fun p =>
@@ -1479,12 +967,6 @@ theorem map_inl (s : Submonoid M) : s.map (inl M N) = s.Prod ⊥ :=
 #align submonoid.map_inl Submonoid.map_inl
 #align add_submonoid.map_inl AddSubmonoid.map_inl
 
-/- warning: submonoid.map_inr -> Submonoid.map_inr 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] (s : Submonoid.{u2} N _inst_2), Eq.{succ (max u1 u2)} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Submonoid.map.{u2, max u1 u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.{u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.inr.{u1, u2} M N _inst_1 _inst_2) s) (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 (Bot.bot.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasBot.{u1} M _inst_1)) s)
-but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (s : Submonoid.{u2} N _inst_2), Eq.{max (succ u1) (succ u2)} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.instMulOneClassProd.{u1, u2} M N _inst_1 _inst_2)) (Submonoid.map.{u2, max u1 u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.instMulOneClassProd.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.{u2, max u2 u1} N (Prod.{u1, u2} M N) _inst_2 (Prod.instMulOneClassProd.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.instMulOneClassProd.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.inr.{u1, u2} M N _inst_1 _inst_2) s) (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 (Bot.bot.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instBotSubmonoid.{u1} M _inst_1)) s)
-Case conversion may be inaccurate. Consider using '#align submonoid.map_inr Submonoid.map_inrₓ'. -/
 @[to_additive]
 theorem map_inr (s : Submonoid N) : s.map (inr M N) = prod ⊥ s :=
   ext fun p =>
@@ -1493,12 +975,6 @@ theorem map_inr (s : Submonoid N) : s.map (inr M N) = prod ⊥ s :=
 #align submonoid.map_inr Submonoid.map_inr
 #align add_submonoid.map_inr AddSubmonoid.map_inr
 
-/- warning: submonoid.prod_bot_sup_bot_prod -> Submonoid.prod_bot_sup_bot_prod 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] (s : Submonoid.{u1} M _inst_1) (t : Submonoid.{u2} N _inst_2), Eq.{succ (max u1 u2)} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Sup.sup.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (SemilatticeSup.toHasSup.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Lattice.toSemilatticeSup.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (CompleteLattice.toLattice.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Submonoid.completeLattice.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2))))) (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 s (Bot.bot.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasBot.{u2} N _inst_2))) (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 (Bot.bot.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasBot.{u1} M _inst_1)) t)) (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 s t)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (s : Submonoid.{u2} M _inst_1) (t : Submonoid.{u1} N _inst_2), Eq.{max (succ u2) (succ u1)} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Sup.sup.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (SemilatticeSup.toSup.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Lattice.toSemilatticeSup.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (CompleteLattice.toLattice.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Submonoid.instCompleteLatticeSubmonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2))))) (Submonoid.prod.{u2, u1} M N _inst_1 _inst_2 s (Bot.bot.{u1} (Submonoid.{u1} N _inst_2) (Submonoid.instBotSubmonoid.{u1} N _inst_2))) (Submonoid.prod.{u2, u1} M N _inst_1 _inst_2 (Bot.bot.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instBotSubmonoid.{u2} M _inst_1)) t)) (Submonoid.prod.{u2, u1} M N _inst_1 _inst_2 s t)
-Case conversion may be inaccurate. Consider using '#align submonoid.prod_bot_sup_bot_prod Submonoid.prod_bot_sup_bot_prodₓ'. -/
 @[simp, to_additive prod_bot_sup_bot_prod]
 theorem prod_bot_sup_bot_prod (s : Submonoid M) (t : Submonoid N) :
     s.Prod ⊥ ⊔ prod ⊥ t = s.Prod t :=
@@ -1509,12 +985,6 @@ theorem prod_bot_sup_bot_prod (s : Submonoid M) (t : Submonoid N) :
 #align submonoid.prod_bot_sup_bot_prod Submonoid.prod_bot_sup_bot_prod
 #align add_submonoid.prod_bot_sup_bot_prod AddSubmonoid.prod_bot_sup_bot_prod
 
-/- warning: submonoid.mem_map_equiv -> Submonoid.mem_map_equiv 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 : MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)} {K : Submonoid.{u1} M _inst_1} {x : N}, Iff (Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 f) K)) (Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (fun (_x : MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) => N -> M) (MulEquiv.hasCoeToFun.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (MulEquiv.symm.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) f) x) K)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {f : MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)} {K : Submonoid.{u2} M _inst_1} {x : N}, Iff (Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 f) K)) (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : N) => M) x) (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : N) => M) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (EquivLike.toEmbeddingLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulEquivClass.toEquivLike.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) f) x) K)
-Case conversion may be inaccurate. Consider using '#align submonoid.mem_map_equiv Submonoid.mem_map_equivₓ'. -/
 @[to_additive]
 theorem mem_map_equiv {f : M ≃* N} {K : Submonoid M} {x : N} :
     x ∈ K.map f.toMonoidHom ↔ f.symm x ∈ K :=
@@ -1522,12 +992,6 @@ theorem mem_map_equiv {f : M ≃* N} {K : Submonoid M} {x : N} :
 #align submonoid.mem_map_equiv Submonoid.mem_map_equiv
 #align add_submonoid.mem_map_equiv AddSubmonoid.mem_map_equiv
 
-/- warning: submonoid.map_equiv_eq_comap_symm -> Submonoid.map_equiv_eq_comap_symm 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 : MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (K : Submonoid.{u1} M _inst_1), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 f) K) (Submonoid.comap.{u2, u1, max u1 u2} N M _inst_2 _inst_1 (MonoidHom.{u2, u1} N M _inst_2 _inst_1) (MonoidHom.monoidHomClass.{u2, u1} N M _inst_2 _inst_1) (MulEquiv.toMonoidHom.{u2, u1} N M _inst_2 _inst_1 (MulEquiv.symm.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) f)) K)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) (K : Submonoid.{u2} M _inst_1), Eq.{succ u1} (Submonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 f) K) (Submonoid.comap.{u1, u2, max u2 u1} N M _inst_2 _inst_1 (MonoidHom.{u1, u2} N M _inst_2 _inst_1) (MonoidHom.monoidHomClass.{u1, u2} N M _inst_2 _inst_1) (MulEquiv.toMonoidHom.{u1, u2} N M _inst_2 _inst_1 (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) f)) K)
-Case conversion may be inaccurate. Consider using '#align submonoid.map_equiv_eq_comap_symm Submonoid.map_equiv_eq_comap_symmₓ'. -/
 @[to_additive]
 theorem map_equiv_eq_comap_symm (f : M ≃* N) (K : Submonoid M) :
     K.map f.toMonoidHom = K.comap f.symm.toMonoidHom :=
@@ -1535,12 +999,6 @@ theorem map_equiv_eq_comap_symm (f : M ≃* N) (K : Submonoid M) :
 #align submonoid.map_equiv_eq_comap_symm Submonoid.map_equiv_eq_comap_symm
 #align add_submonoid.map_equiv_eq_comap_symm AddSubmonoid.map_equiv_eq_comap_symm
 
-/- warning: submonoid.comap_equiv_eq_map_symm -> Submonoid.comap_equiv_eq_map_symm 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 : MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (K : Submonoid.{u1} M _inst_1), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.comap.{u2, u1, max u1 u2} N M _inst_2 _inst_1 (MonoidHom.{u2, u1} N M _inst_2 _inst_1) (MonoidHom.monoidHomClass.{u2, u1} N M _inst_2 _inst_1) (MulEquiv.toMonoidHom.{u2, u1} N M _inst_2 _inst_1 f) K) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 (MulEquiv.symm.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1) f)) K)
-but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (f : MulEquiv.{u2, u1} N M (MulOneClass.toMul.{u2} N _inst_2) (MulOneClass.toMul.{u1} M _inst_1)) (K : Submonoid.{u1} M _inst_1), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.comap.{u2, u1, max u1 u2} N M _inst_2 _inst_1 (MonoidHom.{u2, u1} N M _inst_2 _inst_1) (MonoidHom.monoidHomClass.{u2, u1} N M _inst_2 _inst_1) (MulEquiv.toMonoidHom.{u2, u1} N M _inst_2 _inst_1 f) K) (Submonoid.map.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 (MulEquiv.symm.{u2, u1} N M (MulOneClass.toMul.{u2} N _inst_2) (MulOneClass.toMul.{u1} M _inst_1) f)) K)
-Case conversion may be inaccurate. Consider using '#align submonoid.comap_equiv_eq_map_symm Submonoid.comap_equiv_eq_map_symmₓ'. -/
 @[to_additive]
 theorem comap_equiv_eq_map_symm (f : N ≃* M) (K : Submonoid M) :
     K.comap f.toMonoidHom = K.map f.symm.toMonoidHom :=
@@ -1548,24 +1006,12 @@ theorem comap_equiv_eq_map_symm (f : N ≃* M) (K : Submonoid M) :
 #align submonoid.comap_equiv_eq_map_symm Submonoid.comap_equiv_eq_map_symm
 #align add_submonoid.comap_equiv_eq_map_symm AddSubmonoid.comap_equiv_eq_map_symm
 
-/- warning: submonoid.map_equiv_top -> Submonoid.map_equiv_top 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 : MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 f) (Top.top.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasTop.{u1} M _inst_1))) (Top.top.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasTop.{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 : MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)), Eq.{succ u1} (Submonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 f) (Top.top.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instTopSubmonoid.{u2} M _inst_1))) (Top.top.{u1} (Submonoid.{u1} N _inst_2) (Submonoid.instTopSubmonoid.{u1} N _inst_2))
-Case conversion may be inaccurate. Consider using '#align submonoid.map_equiv_top Submonoid.map_equiv_topₓ'. -/
 @[simp, to_additive]
 theorem map_equiv_top (f : M ≃* N) : (⊤ : Submonoid M).map f.toMonoidHom = ⊤ :=
   SetLike.coe_injective <| Set.image_univ.trans f.Surjective.range_eq
 #align submonoid.map_equiv_top Submonoid.map_equiv_top
 #align add_submonoid.map_equiv_top AddSubmonoid.map_equiv_top
 
-/- warning: submonoid.le_prod_iff -> Submonoid.le_prod_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] {s : Submonoid.{u1} M _inst_1} {t : Submonoid.{u2} N _inst_2} {u : Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)}, Iff (LE.le.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Preorder.toHasLe.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (SetLike.partialOrder.{max u1 u2, max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Prod.{u1, u2} M N) (Submonoid.setLike.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2))))) u (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 s t)) (And (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) (Submonoid.map.{max u1 u2, u1, max u1 u2} (Prod.{u1, u2} M N) M (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_1 (MonoidHom.{max u1 u2, u1} (Prod.{u1, u2} M N) M (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_1) (MonoidHom.monoidHomClass.{max u1 u2, u1} (Prod.{u1, u2} M N) M (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_1) (MonoidHom.fst.{u1, u2} M N _inst_1 _inst_2) u) s) (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) (Submonoid.map.{max u1 u2, u2, max u1 u2} (Prod.{u1, u2} M N) N (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_2 (MonoidHom.{max u1 u2, u2} (Prod.{u1, u2} M N) N (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_2) (MonoidHom.monoidHomClass.{max u1 u2, u2} (Prod.{u1, u2} M N) N (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_2) (MonoidHom.snd.{u1, u2} M N _inst_1 _inst_2) u) t))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {s : Submonoid.{u2} M _inst_1} {t : Submonoid.{u1} N _inst_2} {u : Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)}, Iff (LE.le.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Preorder.toLE.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (CompleteSemilatticeInf.toPartialOrder.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (CompleteLattice.toCompleteSemilatticeInf.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Submonoid.instCompleteLatticeSubmonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)))))) u (Submonoid.prod.{u2, u1} M N _inst_1 _inst_2 s t)) (And (LE.le.{u2} (Submonoid.{u2} M _inst_1) (Preorder.toLE.{u2} (Submonoid.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1))))) (Submonoid.map.{max u2 u1, u2, max u2 u1} (Prod.{u2, u1} M N) M (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) _inst_1 (MonoidHom.{max u1 u2, u2} (Prod.{u2, u1} M N) M (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) _inst_1) (MonoidHom.monoidHomClass.{max u2 u1, u2} (Prod.{u2, u1} M N) M (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) _inst_1) (MonoidHom.fst.{u2, u1} M N _inst_1 _inst_2) u) s) (LE.le.{u1} (Submonoid.{u1} N _inst_2) (Preorder.toLE.{u1} (Submonoid.{u1} N _inst_2) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u1} N _inst_2))))) (Submonoid.map.{max u2 u1, u1, max u2 u1} (Prod.{u2, u1} M N) N (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) _inst_2 (MonoidHom.{max u1 u2, u1} (Prod.{u2, u1} M N) N (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) _inst_2) (MonoidHom.monoidHomClass.{max u2 u1, u1} (Prod.{u2, u1} M N) N (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) _inst_2) (MonoidHom.snd.{u2, u1} M N _inst_1 _inst_2) u) t))
-Case conversion may be inaccurate. Consider using '#align submonoid.le_prod_iff Submonoid.le_prod_iffₓ'. -/
 @[to_additive le_prod_iff]
 theorem le_prod_iff {s : Submonoid M} {t : Submonoid N} {u : Submonoid (M × N)} :
     u ≤ s.Prod t ↔ u.map (fst M N) ≤ s ∧ u.map (snd M N) ≤ t :=
@@ -1579,12 +1025,6 @@ theorem le_prod_iff {s : Submonoid M} {t : Submonoid N} {u : Submonoid (M × N)}
 #align submonoid.le_prod_iff Submonoid.le_prod_iff
 #align add_submonoid.le_prod_iff AddSubmonoid.le_prod_iff
 
-/- warning: submonoid.prod_le_iff -> Submonoid.prod_le_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] {s : Submonoid.{u1} M _inst_1} {t : Submonoid.{u2} N _inst_2} {u : Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)}, Iff (LE.le.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Preorder.toHasLe.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (SetLike.partialOrder.{max u1 u2, max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Prod.{u1, u2} M N) (Submonoid.setLike.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2))))) (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 s t) u) (And (LE.le.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Preorder.toHasLe.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (SetLike.partialOrder.{max u1 u2, max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Prod.{u1, u2} M N) (Submonoid.setLike.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2))))) (Submonoid.map.{u1, max u1 u2, max u1 u2} M (Prod.{u1, u2} M N) _inst_1 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.{u1, max u1 u2} M (Prod.{u1, u2} M N) _inst_1 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u1, max u1 u2} M (Prod.{u1, u2} M N) _inst_1 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.inl.{u1, u2} M N _inst_1 _inst_2) s) u) (LE.le.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Preorder.toHasLe.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (SetLike.partialOrder.{max u1 u2, max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Prod.{u1, u2} M N) (Submonoid.setLike.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2))))) (Submonoid.map.{u2, max u1 u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.{u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.inr.{u1, u2} M N _inst_1 _inst_2) t) u))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {s : Submonoid.{u2} M _inst_1} {t : Submonoid.{u1} N _inst_2} {u : Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)}, Iff (LE.le.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Preorder.toLE.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (CompleteSemilatticeInf.toPartialOrder.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (CompleteLattice.toCompleteSemilatticeInf.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Submonoid.instCompleteLatticeSubmonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)))))) (Submonoid.prod.{u2, u1} M N _inst_1 _inst_2 s t) u) (And (LE.le.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Preorder.toLE.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (CompleteSemilatticeInf.toPartialOrder.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (CompleteLattice.toCompleteSemilatticeInf.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Submonoid.instCompleteLatticeSubmonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)))))) (Submonoid.map.{u2, max u2 u1, max u2 u1} M (Prod.{u2, u1} M N) _inst_1 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.{u2, max u1 u2} M (Prod.{u2, u1} M N) _inst_1 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u2, max u2 u1} M (Prod.{u2, u1} M N) _inst_1 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.inl.{u2, u1} M N _inst_1 _inst_2) s) u) (LE.le.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Preorder.toLE.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (CompleteSemilatticeInf.toPartialOrder.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (CompleteLattice.toCompleteSemilatticeInf.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Submonoid.instCompleteLatticeSubmonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)))))) (Submonoid.map.{u1, max u2 u1, max u2 u1} N (Prod.{u2, u1} M N) _inst_2 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.{u1, max u1 u2} N (Prod.{u2, u1} M N) _inst_2 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u1, max u2 u1} N (Prod.{u2, u1} M N) _inst_2 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.inr.{u2, u1} M N _inst_1 _inst_2) t) u))
-Case conversion may be inaccurate. Consider using '#align submonoid.prod_le_iff Submonoid.prod_le_iffₓ'. -/
 @[to_additive prod_le_iff]
 theorem prod_le_iff {s : Submonoid M} {t : Submonoid N} {u : Submonoid (M × N)} :
     s.Prod t ≤ u ↔ s.map (inl M N) ≤ u ∧ t.map (inr M N) ≤ u :=
@@ -1652,36 +1092,18 @@ def mrange (f : F) : Submonoid N :=
 #align add_monoid_hom.mrange AddMonoidHom.mrange
 -/
 
-/- warning: monoid_hom.coe_mrange -> MonoidHom.coe_mrange 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), Eq.{succ u2} (Set.{u2} N) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Submonoid.{u2} N _inst_2) (Set.{u2} N) (HasLiftT.mk.{succ u2, succ u2} (Submonoid.{u2} N _inst_2) (Set.{u2} N) (CoeTCₓ.coe.{succ u2, succ u2} (Submonoid.{u2} N _inst_2) (Set.{u2} N) (SetLike.Set.hasCoeT.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) (MonoidHom.mrange.{u1, u2, u3} M N _inst_1 _inst_2 F mc f)) (Set.range.{u2, succ u1} N M (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 mc))) f))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] (f : F), Eq.{succ u3} (Set.{u3} N) (SetLike.coe.{u3, u3} (Submonoid.{u3} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u3} N _inst_2) (MonoidHom.mrange.{u2, u3, u1} M N _inst_1 _inst_2 F mc f)) (Set.range.{u3, succ u2} N M (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_mrange MonoidHom.coe_mrangeₓ'. -/
 @[simp, to_additive]
 theorem coe_mrange (f : F) : (mrange f : Set N) = Set.range f :=
   rfl
 #align monoid_hom.coe_mrange MonoidHom.coe_mrange
 #align add_monoid_hom.coe_mrange AddMonoidHom.coe_mrange
 
-/- warning: monoid_hom.mem_mrange -> MonoidHom.mem_mrange 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F} {y : N}, Iff (Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) y (MonoidHom.mrange.{u1, u2, u3} M N _inst_1 _inst_2 F mc f)) (Exists.{succ u1} M (fun (x : 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 (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 mc))) f x) y))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F} {y : N}, Iff (Membership.mem.{u3, u3} N (Submonoid.{u3} N _inst_2) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u3} N _inst_2)) y (MonoidHom.mrange.{u2, u3, u1} M N _inst_1 _inst_2 F mc f)) (Exists.{succ u2} M (fun (x : M) => Eq.{succ u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f x) y))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.mem_mrange MonoidHom.mem_mrangeₓ'. -/
 @[simp, to_additive]
 theorem mem_mrange {f : F} {y : N} : y ∈ mrange f ↔ ∃ x, f x = y :=
   Iff.rfl
 #align monoid_hom.mem_mrange MonoidHom.mem_mrange
 #align add_monoid_hom.mem_mrange AddMonoidHom.mem_mrange
 
-/- warning: monoid_hom.mrange_eq_map -> MonoidHom.mrange_eq_map 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (MonoidHom.mrange.{u1, u2, u3} M N _inst_1 _inst_2 F mc f) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Top.top.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasTop.{u1} M _inst_1)))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] (f : F), Eq.{succ u3} (Submonoid.{u3} N _inst_2) (MonoidHom.mrange.{u2, u3, u1} M N _inst_1 _inst_2 F mc f) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Top.top.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instTopSubmonoid.{u2} M _inst_1)))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.mrange_eq_map MonoidHom.mrange_eq_mapₓ'. -/
 @[to_additive]
 theorem mrange_eq_map (f : F) : mrange f = (⊤ : Submonoid M).map f :=
   Submonoid.copy_eq _
@@ -1690,12 +1112,6 @@ theorem mrange_eq_map (f : F) : mrange f = (⊤ : Submonoid M).map f :=
 
 omit mc
 
-/- warning: monoid_hom.map_mrange -> MonoidHom.map_mrange 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.{succ u3} (Submonoid.{u3} P _inst_3) (Submonoid.map.{u2, u3, max u3 u2} N P _inst_2 _inst_3 (MonoidHom.{u2, u3} N P _inst_2 _inst_3) (MonoidHom.monoidHomClass.{u2, u3} N P _inst_2 _inst_3) g (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)) (MonoidHom.mrange.{u1, u3, max u3 u1} M P _inst_1 _inst_3 (MonoidHom.{u1, u3} M P _inst_1 _inst_3) (MonoidHom.monoidHomClass.{u1, u3} M P _inst_1 _inst_3) (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.{u1}} {N : Type.{u3}} {P : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u3} N] [_inst_3 : MulOneClass.{u2} P] (g : MonoidHom.{u3, u2} N P _inst_2 _inst_3) (f : MonoidHom.{u1, u3} M N _inst_1 _inst_2), Eq.{succ u2} (Submonoid.{u2} P _inst_3) (Submonoid.map.{u3, u2, max u3 u2} N P _inst_2 _inst_3 (MonoidHom.{u3, u2} N P _inst_2 _inst_3) (MonoidHom.monoidHomClass.{u3, u2} N P _inst_2 _inst_3) g (MonoidHom.mrange.{u1, u3, max u1 u3} M N _inst_1 _inst_2 (MonoidHom.{u1, u3} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u3} M N _inst_1 _inst_2) f)) (MonoidHom.mrange.{u1, u2, max u2 u1} M P _inst_1 _inst_3 (MonoidHom.{u1, u2} M P _inst_1 _inst_3) (MonoidHom.monoidHomClass.{u1, u2} M P _inst_1 _inst_3) (MonoidHom.comp.{u1, u3, u2} M N P _inst_1 _inst_2 _inst_3 g f))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.map_mrange MonoidHom.map_mrangeₓ'. -/
 @[to_additive]
 theorem map_mrange (g : N →* P) (f : M →* N) : f.mrange.map g = (g.comp f).mrange := by
   simpa only [mrange_eq_map] using (⊤ : Submonoid M).map_map g f
@@ -1704,24 +1120,12 @@ theorem map_mrange (g : N →* P) (f : M →* N) : f.mrange.map g = (g.comp f).m
 
 include mc
 
-/- warning: monoid_hom.mrange_top_iff_surjective -> MonoidHom.mrange_top_iff_surjective 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, Iff (Eq.{succ u2} (Submonoid.{u2} N _inst_2) (MonoidHom.mrange.{u1, u2, u3} M N _inst_1 _inst_2 F mc f) (Top.top.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasTop.{u2} N _inst_2))) (Function.Surjective.{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) (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 mc))) f))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, Iff (Eq.{succ u3} (Submonoid.{u3} N _inst_2) (MonoidHom.mrange.{u2, u3, u1} M N _inst_1 _inst_2 F mc f) (Top.top.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instTopSubmonoid.{u3} N _inst_2))) (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.mrange_top_iff_surjective MonoidHom.mrange_top_iff_surjectiveₓ'. -/
 @[to_additive]
 theorem mrange_top_iff_surjective {f : F} : mrange f = (⊤ : Submonoid N) ↔ Function.Surjective f :=
   SetLike.ext'_iff.trans <| Iff.trans (by rw [coe_mrange, coe_top]) Set.range_iff_surjective
 #align monoid_hom.mrange_top_iff_surjective MonoidHom.mrange_top_iff_surjective
 #align add_monoid_hom.mrange_top_iff_surjective AddMonoidHom.mrange_top_iff_surjective
 
-/- warning: monoid_hom.mrange_top_of_surjective -> MonoidHom.mrange_top_of_surjective 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), (Function.Surjective.{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) (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 mc))) f)) -> (Eq.{succ u2} (Submonoid.{u2} N _inst_2) (MonoidHom.mrange.{u1, u2, u3} M N _inst_1 _inst_2 F mc f) (Top.top.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasTop.{u2} N _inst_2)))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F), (Function.Surjective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (Eq.{succ u2} (Submonoid.{u2} N _inst_2) (MonoidHom.mrange.{u3, u2, u1} M N _inst_1 _inst_2 F mc f) (Top.top.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instTopSubmonoid.{u2} N _inst_2)))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.mrange_top_of_surjective MonoidHom.mrange_top_of_surjectiveₓ'. -/
 /-- The range of a surjective monoid hom is the whole of the codomain. -/
 @[to_additive "The range of a surjective `add_monoid` hom is the whole of the codomain."]
 theorem mrange_top_of_surjective (f : F) (hf : Function.Surjective f) :
@@ -1730,24 +1134,12 @@ theorem mrange_top_of_surjective (f : F) (hf : Function.Surjective f) :
 #align monoid_hom.mrange_top_of_surjective MonoidHom.mrange_top_of_surjective
 #align add_monoid_hom.mrange_top_of_surjective AddMonoidHom.mrange_top_of_surjective
 
-/- warning: monoid_hom.mclosure_preimage_le -> MonoidHom.mclosure_preimage_le 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F) (s : Set.{u2} N), LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) (Submonoid.closure.{u1} M _inst_1 (Set.preimage.{u1, 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) (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 mc))) f) s)) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Submonoid.closure.{u2} N _inst_2 s))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] (f : F) (s : Set.{u3} N), LE.le.{u2} (Submonoid.{u2} M _inst_1) (Preorder.toLE.{u2} (Submonoid.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1))))) (Submonoid.closure.{u2} M _inst_1 (Set.preimage.{u2, u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f) s)) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Submonoid.closure.{u3} N _inst_2 s))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.mclosure_preimage_le MonoidHom.mclosure_preimage_leₓ'. -/
 @[to_additive]
 theorem mclosure_preimage_le (f : F) (s : Set N) : closure (f ⁻¹' s) ≤ (closure s).comap f :=
   closure_le.2 fun x hx => SetLike.mem_coe.2 <| mem_comap.2 <| subset_closure hx
 #align monoid_hom.mclosure_preimage_le MonoidHom.mclosure_preimage_le
 #align add_monoid_hom.mclosure_preimage_le AddMonoidHom.mclosure_preimage_le
 
-/- warning: monoid_hom.map_mclosure -> MonoidHom.map_mclosure 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F) (s : Set.{u1} M), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Submonoid.closure.{u1} M _inst_1 s)) (Submonoid.closure.{u2} N _inst_2 (Set.image.{u1, 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) (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 mc))) f) s))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) (s : Set.{u3} M), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Submonoid.closure.{u3} M _inst_1 s)) (Submonoid.closure.{u2} N _inst_2 (Set.image.{u3, u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f) s))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.map_mclosure MonoidHom.map_mclosureₓ'. -/
 /-- The image under a monoid hom of the submonoid generated by a set equals the submonoid generated
     by the image of the set. -/
 @[to_additive
@@ -1772,9 +1164,6 @@ def restrict {N S : Type _} [MulOneClass N] [SetLike S M] [SubmonoidClass S M] (
 #align add_monoid_hom.restrict AddMonoidHom.restrict
 -/
 
-/- warning: monoid_hom.restrict_apply -> MonoidHom.restrict_apply is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align monoid_hom.restrict_apply MonoidHom.restrict_applyₓ'. -/
 @[simp, to_additive]
 theorem restrict_apply {N S : Type _} [MulOneClass N] [SetLike S M] [SubmonoidClass S M]
     (f : M →* N) (s : S) (x : s) : f.restrict s x = f x :=
@@ -1782,12 +1171,6 @@ theorem restrict_apply {N S : Type _} [MulOneClass N] [SetLike S M] [SubmonoidCl
 #align monoid_hom.restrict_apply MonoidHom.restrict_apply
 #align add_monoid_hom.restrict_apply AddMonoidHom.restrict_apply
 
-/- warning: monoid_hom.restrict_mrange -> MonoidHom.restrict_mrange 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] (S : Submonoid.{u1} M _inst_1) (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (MonoidHom.mrange.{u1, u2, max u2 u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) N (SubmonoidClass.toMulOneClass.{u1, u1} M _inst_1 (Submonoid.{u1} M _inst_1) (Submonoid.setLike.{u1} M _inst_1) (Submonoid.submonoidClass.{u1} M _inst_1) S) _inst_2 (MonoidHom.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) N (SubmonoidClass.toMulOneClass.{u1, u1} M _inst_1 (Submonoid.{u1} M _inst_1) (Submonoid.setLike.{u1} M _inst_1) (Submonoid.submonoidClass.{u1} M _inst_1) S) _inst_2) (MonoidHom.monoidHomClass.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) N (SubmonoidClass.toMulOneClass.{u1, u1} M _inst_1 (Submonoid.{u1} M _inst_1) (Submonoid.setLike.{u1} M _inst_1) (Submonoid.submonoidClass.{u1} M _inst_1) S) _inst_2) (MonoidHom.restrict.{u1, u2, u1} M _inst_1 N (Submonoid.{u1} M _inst_1) _inst_2 (Submonoid.setLike.{u1} M _inst_1) (Submonoid.submonoidClass.{u1} M _inst_1) f S)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (S : Submonoid.{u2} M _inst_1) (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} (Submonoid.{u1} N _inst_2) (MonoidHom.mrange.{u2, u1, max u2 u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) N (SubmonoidClass.toMulOneClass.{u2, u2} M _inst_1 (Submonoid.{u2} M _inst_1) (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) (Submonoid.instSubmonoidClassSubmonoidInstSetLikeSubmonoid.{u2} M _inst_1) S) _inst_2 (MonoidHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) N (SubmonoidClass.toMulOneClass.{u2, u2} M _inst_1 (Submonoid.{u2} M _inst_1) (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) (Submonoid.instSubmonoidClassSubmonoidInstSetLikeSubmonoid.{u2} M _inst_1) S) _inst_2) (MonoidHom.monoidHomClass.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) N (SubmonoidClass.toMulOneClass.{u2, u2} M _inst_1 (Submonoid.{u2} M _inst_1) (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) (Submonoid.instSubmonoidClassSubmonoidInstSetLikeSubmonoid.{u2} M _inst_1) S) _inst_2) (MonoidHom.restrict.{u2, u1, u2} M _inst_1 N (Submonoid.{u2} M _inst_1) _inst_2 (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) (Submonoid.instSubmonoidClassSubmonoidInstSetLikeSubmonoid.{u2} M _inst_1) f S)) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S)
-Case conversion may be inaccurate. Consider using '#align monoid_hom.restrict_mrange MonoidHom.restrict_mrangeₓ'. -/
 @[simp, to_additive]
 theorem restrict_mrange (f : M →* N) : (f.restrict S).mrange = S.map f := by
   simp_rw [SetLike.ext_iff, mem_mrange, mem_map, restrict_apply, SetLike.exists, Subtype.coe_mk,
@@ -1795,12 +1178,6 @@ theorem restrict_mrange (f : M →* N) : (f.restrict S).mrange = S.map f := by
 #align monoid_hom.restrict_mrange MonoidHom.restrict_mrange
 #align add_monoid_hom.restrict_mrange AddMonoidHom.restrict_mrange
 
-/- warning: monoid_hom.cod_restrict -> MonoidHom.codRestrict 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] {S : Type.{u3}} [_inst_4 : SetLike.{u3, u2} S N] [_inst_5 : SubmonoidClass.{u3, u2} S N _inst_2 _inst_4] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2) (s : S), (forall (x : M), Membership.Mem.{u2, u3} N S (SetLike.hasMem.{u3, u2} S N _inst_4) (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) s) -> (MonoidHom.{u1, u2} M (coeSort.{succ u3, succ (succ u2)} S Type.{u2} (SetLike.hasCoeToSort.{u3, u2} S N _inst_4) s) _inst_1 (SubmonoidClass.toMulOneClass.{u2, u3} N _inst_2 S _inst_4 _inst_5 s))
-but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {S : Type.{u3}} [_inst_4 : SetLike.{u3, u2} S N] [_inst_5 : SubmonoidClass.{u3, u2} S N _inst_2 _inst_4] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2) (s : S), (forall (x : M), Membership.mem.{u2, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) S (SetLike.instMembership.{u3, u2} S N _inst_4) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, 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 u1 u2, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u1 u2, 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))) f x) s) -> (MonoidHom.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u3} N S (SetLike.instMembership.{u3, u2} S N _inst_4) x s)) _inst_1 (SubmonoidClass.toMulOneClass.{u2, u3} N _inst_2 S _inst_4 _inst_5 s))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.cod_restrict MonoidHom.codRestrictₓ'. -/
 /-- Restriction of a monoid hom to a submonoid of the codomain. -/
 @[to_additive "Restriction of an `add_monoid` hom to an `add_submonoid` of the codomain.",
   simps apply]
@@ -1812,12 +1189,6 @@ def codRestrict {S} [SetLike S N] [SubmonoidClass S N] (f : M →* N) (s : S) (h
 #align monoid_hom.cod_restrict MonoidHom.codRestrict
 #align add_monoid_hom.cod_restrict AddMonoidHom.codRestrict
 
-/- warning: monoid_hom.mrange_restrict -> MonoidHom.mrangeRestrict is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {N : Type.{u2}} [_inst_4 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_4), MonoidHom.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_4) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {N : Type.{u2}} [_inst_4 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_4), MonoidHom.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.mrange_restrict MonoidHom.mrangeRestrictₓ'. -/
 /-- Restriction of a monoid hom to its range interpreted as a submonoid. -/
 @[to_additive "Restriction of an `add_monoid` hom to its range interpreted as a submonoid."]
 def mrangeRestrict {N} [MulOneClass N] (f : M →* N) : M →* f.mrange :=
@@ -1825,9 +1196,6 @@ def mrangeRestrict {N} [MulOneClass N] (f : M →* N) : M →* f.mrange :=
 #align monoid_hom.mrange_restrict MonoidHom.mrangeRestrict
 #align add_monoid_hom.mrange_restrict AddMonoidHom.mrangeRestrict
 
-/- warning: monoid_hom.coe_mrange_restrict -> MonoidHom.coe_mrangeRestrict is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_mrange_restrict MonoidHom.coe_mrangeRestrictₓ'. -/
 @[simp, to_additive]
 theorem coe_mrangeRestrict {N} [MulOneClass N] (f : M →* N) (x : M) :
     (f.mrangeRestrict x : N) = f x :=
@@ -1835,12 +1203,6 @@ theorem coe_mrangeRestrict {N} [MulOneClass N] (f : M →* N) (x : M) :
 #align monoid_hom.coe_mrange_restrict MonoidHom.coe_mrangeRestrict
 #align add_monoid_hom.coe_mrange_restrict AddMonoidHom.coe_mrangeRestrict
 
-/- warning: monoid_hom.mrange_restrict_surjective -> MonoidHom.mrangeRestrict_surjective 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), Function.Surjective.{succ u1, succ u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_2 (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f))) (fun (_x : MonoidHom.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_2 (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f))) => M -> (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f))) (MonoidHom.hasCoeToFun.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_2 (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f))) (MonoidHom.mrangeRestrict.{u1, u2} M _inst_1 N _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), Function.Surjective.{succ u2, succ u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} 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 (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f)) (MonoidHom.monoidHomClass.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))))) (MonoidHom.mrangeRestrict.{u2, u1} M _inst_1 N _inst_2 f))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.mrange_restrict_surjective MonoidHom.mrangeRestrict_surjectiveₓ'. -/
 @[to_additive]
 theorem mrangeRestrict_surjective (f : M →* N) : Function.Surjective f.mrangeRestrict :=
   fun ⟨_, ⟨x, rfl⟩⟩ => ⟨x, rfl⟩
@@ -1860,36 +1222,18 @@ def mker (f : F) : Submonoid M :=
 #align add_monoid_hom.mker AddMonoidHom.mker
 -/
 
-/- warning: monoid_hom.mem_mker -> MonoidHom.mem_mker 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F) {x : M}, Iff (Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x (MonoidHom.mker.{u1, u2, u3} M N _inst_1 _inst_2 F mc 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) (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 mc))) f 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.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) {x : M}, Iff (Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x (MonoidHom.mker.{u3, u2, u1} M N _inst_1 _inst_2 F mc f)) (Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) 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) _inst_2))))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.mem_mker MonoidHom.mem_mkerₓ'. -/
 @[to_additive]
 theorem mem_mker (f : F) {x : M} : x ∈ mker f ↔ f x = 1 :=
   Iff.rfl
 #align monoid_hom.mem_mker MonoidHom.mem_mker
 #align add_monoid_hom.mem_mker AddMonoidHom.mem_mker
 
-/- warning: monoid_hom.coe_mker -> MonoidHom.coe_mker 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), Eq.{succ u1} (Set.{u1} M) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) (MonoidHom.mker.{u1, u2, u3} M N _inst_1 _inst_2 F mc f)) (Set.preimage.{u1, 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) (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 mc))) f) (Singleton.singleton.{u2, u2} N (Set.{u2} N) (Set.hasSingleton.{u2} N) (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.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F), Eq.{succ u3} (Set.{u3} M) (SetLike.coe.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1) (MonoidHom.mker.{u3, u2, u1} M N _inst_1 _inst_2 F mc f)) (Set.preimage.{u3, u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f) (Singleton.singleton.{u2, u2} N (Set.{u2} N) (Set.instSingletonSet.{u2} N) (OfNat.ofNat.{u2} N 1 (One.toOfNat1.{u2} N (MulOneClass.toOne.{u2} N _inst_2)))))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_mker MonoidHom.coe_mkerₓ'. -/
 @[to_additive]
 theorem coe_mker (f : F) : (mker f : Set M) = (f : M → N) ⁻¹' {1} :=
   rfl
 #align monoid_hom.coe_mker MonoidHom.coe_mker
 #align add_monoid_hom.coe_mker AddMonoidHom.coe_mker
 
-/- warning: monoid_hom.decidable_mem_mker -> MonoidHom.decidableMemMker 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] [_inst_4 : DecidableEq.{succ u2} N] (f : F), DecidablePred.{succ u1} M (fun (_x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) _x (MonoidHom.mker.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
-but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] [_inst_4 : DecidableEq.{succ u2} N] (f : F), DecidablePred.{succ u1} M (fun (_x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) _x (MonoidHom.mker.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.decidable_mem_mker MonoidHom.decidableMemMkerₓ'. -/
 @[to_additive]
 instance decidableMemMker [DecidableEq N] (f : F) : DecidablePred (· ∈ mker f) := fun x =>
   decidable_of_iff (f x = 1) (mem_mker f)
@@ -1898,12 +1242,6 @@ instance decidableMemMker [DecidableEq N] (f : F) : DecidablePred (· ∈ mker f
 
 omit mc
 
-/- warning: monoid_hom.comap_mker -> MonoidHom.comap_mker 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.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f (MonoidHom.mker.{u2, u3, max u3 u2} N P _inst_2 _inst_3 (MonoidHom.{u2, u3} N P _inst_2 _inst_3) (MonoidHom.monoidHomClass.{u2, u3} N P _inst_2 _inst_3) g)) (MonoidHom.mker.{u1, u3, max u3 u1} M P _inst_1 _inst_3 (MonoidHom.{u1, u3} M P _inst_1 _inst_3) (MonoidHom.monoidHomClass.{u1, u3} M P _inst_1 _inst_3) (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.{u1}} {N : Type.{u3}} {P : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u3} N] [_inst_3 : MulOneClass.{u2} P] (g : MonoidHom.{u3, u2} N P _inst_2 _inst_3) (f : MonoidHom.{u1, u3} M N _inst_1 _inst_2), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u3, max u1 u3} M N _inst_1 _inst_2 (MonoidHom.{u1, u3} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u3} M N _inst_1 _inst_2) f (MonoidHom.mker.{u3, u2, max u3 u2} N P _inst_2 _inst_3 (MonoidHom.{u3, u2} N P _inst_2 _inst_3) (MonoidHom.monoidHomClass.{u3, u2} N P _inst_2 _inst_3) g)) (MonoidHom.mker.{u1, u2, max u2 u1} M P _inst_1 _inst_3 (MonoidHom.{u1, u2} M P _inst_1 _inst_3) (MonoidHom.monoidHomClass.{u1, u2} M P _inst_1 _inst_3) (MonoidHom.comp.{u1, u3, u2} M N P _inst_1 _inst_2 _inst_3 g f))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.comap_mker MonoidHom.comap_mkerₓ'. -/
 @[to_additive]
 theorem comap_mker (g : N →* P) (f : M →* N) : g.mker.comap f = (g.comp f).mker :=
   rfl
@@ -1912,12 +1250,6 @@ theorem comap_mker (g : N →* P) (f : M →* N) : g.mker.comap f = (g.comp f).m
 
 include mc
 
-/- warning: monoid_hom.comap_bot' -> MonoidHom.comap_bot' 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Bot.bot.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasBot.{u2} N _inst_2))) (MonoidHom.mker.{u1, u2, u3} M N _inst_1 _inst_2 F mc f)
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F), Eq.{succ u3} (Submonoid.{u3} M _inst_1) (Submonoid.comap.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Bot.bot.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instBotSubmonoid.{u2} N _inst_2))) (MonoidHom.mker.{u3, u2, u1} M N _inst_1 _inst_2 F mc f)
-Case conversion may be inaccurate. Consider using '#align monoid_hom.comap_bot' MonoidHom.comap_bot'ₓ'. -/
 @[simp, to_additive]
 theorem comap_bot' (f : F) : (⊥ : Submonoid N).comap f = mker f :=
   rfl
@@ -1926,24 +1258,12 @@ theorem comap_bot' (f : F) : (⊥ : Submonoid N).comap f = mker f :=
 
 omit mc
 
-/- warning: monoid_hom.restrict_mker -> MonoidHom.restrict_mker 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] (S : Submonoid.{u1} M _inst_1) (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u1} (Submonoid.{u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (Submonoid.toMulOneClass.{u1} M _inst_1 S)) (MonoidHom.mker.{u1, u2, max u2 u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) N (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_2 (MonoidHom.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) N (SubmonoidClass.toMulOneClass.{u1, u1} M _inst_1 (Submonoid.{u1} M _inst_1) (Submonoid.setLike.{u1} M _inst_1) (Submonoid.submonoidClass.{u1} M _inst_1) S) _inst_2) (MonoidHom.monoidHomClass.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) N (SubmonoidClass.toMulOneClass.{u1, u1} M _inst_1 (Submonoid.{u1} M _inst_1) (Submonoid.setLike.{u1} M _inst_1) (Submonoid.submonoidClass.{u1} M _inst_1) S) _inst_2) (MonoidHom.restrict.{u1, u2, u1} M _inst_1 N (Submonoid.{u1} M _inst_1) _inst_2 (Submonoid.setLike.{u1} M _inst_1) (Submonoid.submonoidClass.{u1} M _inst_1) f S)) (Submonoid.comap.{u1, u1, u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1 (MonoidHom.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) (MonoidHom.monoidHomClass.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) (Submonoid.subtype.{u1} M _inst_1 S) (MonoidHom.mker.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{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] (S : Submonoid.{u2} M _inst_1) (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u2} (Submonoid.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (SubmonoidClass.toMulOneClass.{u2, u2} M _inst_1 (Submonoid.{u2} M _inst_1) (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) (Submonoid.instSubmonoidClassSubmonoidInstSetLikeSubmonoid.{u2} M _inst_1) S)) (MonoidHom.mker.{u2, u1, max u2 u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) N (SubmonoidClass.toMulOneClass.{u2, u2} M _inst_1 (Submonoid.{u2} M _inst_1) (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) (Submonoid.instSubmonoidClassSubmonoidInstSetLikeSubmonoid.{u2} M _inst_1) S) _inst_2 (MonoidHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) N (SubmonoidClass.toMulOneClass.{u2, u2} M _inst_1 (Submonoid.{u2} M _inst_1) (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) (Submonoid.instSubmonoidClassSubmonoidInstSetLikeSubmonoid.{u2} M _inst_1) S) _inst_2) (MonoidHom.monoidHomClass.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) N (SubmonoidClass.toMulOneClass.{u2, u2} M _inst_1 (Submonoid.{u2} M _inst_1) (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) (Submonoid.instSubmonoidClassSubmonoidInstSetLikeSubmonoid.{u2} M _inst_1) S) _inst_2) (MonoidHom.restrict.{u2, u1, u2} M _inst_1 N (Submonoid.{u2} M _inst_1) _inst_2 (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) (Submonoid.instSubmonoidClassSubmonoidInstSetLikeSubmonoid.{u2} M _inst_1) f S)) (Submonoid.comap.{u2, u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u2} M _inst_1 S) _inst_1 (MonoidHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u2} M _inst_1 S) _inst_1) (MonoidHom.monoidHomClass.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u2} M _inst_1 S) _inst_1) (Submonoid.subtype.{u2} M _inst_1 S) (MonoidHom.mker.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} 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.restrict_mker MonoidHom.restrict_mkerₓ'. -/
 @[simp, to_additive]
 theorem restrict_mker (f : M →* N) : (f.restrict S).mker = f.mker.comap S.Subtype :=
   rfl
 #align monoid_hom.restrict_mker MonoidHom.restrict_mker
 #align add_monoid_hom.restrict_mker AddMonoidHom.restrict_mker
 
-/- warning: monoid_hom.range_restrict_mker -> MonoidHom.mrangeRestrict_mker 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 u1} (Submonoid.{u1} M _inst_1) (MonoidHom.mker.{u1, u2, max u2 u1} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_2 (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)) (MonoidHom.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_2 (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f))) (MonoidHom.monoidHomClass.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_2 (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f))) (MonoidHom.mrangeRestrict.{u1, u2} M _inst_1 N _inst_2 f)) (MonoidHom.mker.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{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.{succ u2} (Submonoid.{u2} M _inst_1) (MonoidHom.mker.{u2, u1, max u2 u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f)) (MonoidHom.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) (MonoidHom.monoidHomClass.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) (MonoidHom.mrangeRestrict.{u2, u1} M _inst_1 N _inst_2 f)) (MonoidHom.mker.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} 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.range_restrict_mker MonoidHom.mrangeRestrict_mkerₓ'. -/
 @[to_additive]
 theorem mrangeRestrict_mker (f : M →* N) : mker (mrangeRestrict f) = mker f :=
   by
@@ -1953,23 +1273,11 @@ theorem mrangeRestrict_mker (f : M →* N) : mker (mrangeRestrict f) = mker f :=
 #align monoid_hom.range_restrict_mker MonoidHom.mrangeRestrict_mker
 #align add_monoid_hom.range_restrict_mker AddMonoidHom.mrangeRestrict_mker
 
-/- warning: monoid_hom.mker_one -> MonoidHom.mker_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], Eq.{succ u1} (Submonoid.{u1} M _inst_1) (MonoidHom.mker.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{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))))) (Top.top.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasTop.{u1} M _inst_1))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N], Eq.{succ u2} (Submonoid.{u2} M _inst_1) (MonoidHom.mker.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} 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)))) (Top.top.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instTopSubmonoid.{u2} M _inst_1))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.mker_one MonoidHom.mker_oneₓ'. -/
 @[simp, to_additive]
 theorem mker_one : (1 : M →* N).mker = ⊤ := by ext; simp [mem_mker]
 #align monoid_hom.mker_one MonoidHom.mker_one
 #align add_monoid_hom.mker_zero AddMonoidHom.mker_zero
 
-/- warning: monoid_hom.prod_map_comap_prod' -> MonoidHom.prod_map_comap_prod' 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] {M' : Type.{u3}} {N' : Type.{u4}} [_inst_4 : MulOneClass.{u3} M'] [_inst_5 : MulOneClass.{u4} N'] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2) (g : MonoidHom.{u3, u4} M' N' _inst_4 _inst_5) (S : Submonoid.{u2} N _inst_2) (S' : Submonoid.{u4} N' _inst_5), Eq.{succ (max u1 u3)} (Submonoid.{max u1 u3} (Prod.{u1, u3} M M') (Prod.mulOneClass.{u1, u3} M M' _inst_1 _inst_4)) (Submonoid.comap.{max u1 u3, max u2 u4, max (max u2 u4) u1 u3} (Prod.{u1, u3} M M') (Prod.{u2, u4} N N') (Prod.mulOneClass.{u1, u3} M M' _inst_1 _inst_4) (Prod.mulOneClass.{u2, u4} N N' _inst_2 _inst_5) (MonoidHom.{max u1 u3, max u2 u4} (Prod.{u1, u3} M M') (Prod.{u2, u4} N N') (Prod.mulOneClass.{u1, u3} M M' _inst_1 _inst_4) (Prod.mulOneClass.{u2, u4} N N' _inst_2 _inst_5)) (MonoidHom.monoidHomClass.{max u1 u3, max u2 u4} (Prod.{u1, u3} M M') (Prod.{u2, u4} N N') (Prod.mulOneClass.{u1, u3} M M' _inst_1 _inst_4) (Prod.mulOneClass.{u2, u4} N N' _inst_2 _inst_5)) (MonoidHom.prodMap.{u1, u3, u2, u4} M M' _inst_1 _inst_4 N N' _inst_2 _inst_5 f g) (Submonoid.prod.{u2, u4} N N' _inst_2 _inst_5 S S')) (Submonoid.prod.{u1, u3} M M' _inst_1 _inst_4 (Submonoid.comap.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S) (Submonoid.comap.{u3, u4, max u4 u3} M' N' _inst_4 _inst_5 (MonoidHom.{u3, u4} M' N' _inst_4 _inst_5) (MonoidHom.monoidHomClass.{u3, u4} M' N' _inst_4 _inst_5) g S'))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {M' : Type.{u4}} {N' : Type.{u3}} [_inst_4 : MulOneClass.{u4} M'] [_inst_5 : MulOneClass.{u3} N'] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2) (g : MonoidHom.{u4, u3} M' N' _inst_4 _inst_5) (S : Submonoid.{u1} N _inst_2) (S' : Submonoid.{u3} N' _inst_5), Eq.{max (succ u2) (succ u4)} (Submonoid.{max u2 u4} (Prod.{u2, u4} M M') (Prod.instMulOneClassProd.{u2, u4} M M' _inst_1 _inst_4)) (Submonoid.comap.{max u2 u4, max u1 u3, max (max (max u3 u1) u4) u2} (Prod.{u2, u4} M M') (Prod.{u1, u3} N N') (Prod.instMulOneClassProd.{u2, u4} M M' _inst_1 _inst_4) (Prod.instMulOneClassProd.{u1, u3} N N' _inst_2 _inst_5) (MonoidHom.{max u4 u2, max u3 u1} (Prod.{u2, u4} M M') (Prod.{u1, u3} N N') (Prod.instMulOneClassProd.{u2, u4} M M' _inst_1 _inst_4) (Prod.instMulOneClassProd.{u1, u3} N N' _inst_2 _inst_5)) (MonoidHom.monoidHomClass.{max u2 u4, max u1 u3} (Prod.{u2, u4} M M') (Prod.{u1, u3} N N') (Prod.instMulOneClassProd.{u2, u4} M M' _inst_1 _inst_4) (Prod.instMulOneClassProd.{u1, u3} N N' _inst_2 _inst_5)) (MonoidHom.prodMap.{u2, u4, u1, u3} M M' _inst_1 _inst_4 N N' _inst_2 _inst_5 f g) (Submonoid.prod.{u1, u3} N N' _inst_2 _inst_5 S S')) (Submonoid.prod.{u2, u4} M M' _inst_1 _inst_4 (Submonoid.comap.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S) (Submonoid.comap.{u4, u3, max u4 u3} M' N' _inst_4 _inst_5 (MonoidHom.{u4, u3} M' N' _inst_4 _inst_5) (MonoidHom.monoidHomClass.{u4, u3} M' N' _inst_4 _inst_5) g S'))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.prod_map_comap_prod' MonoidHom.prod_map_comap_prod'ₓ'. -/
 @[to_additive]
 theorem prod_map_comap_prod' {M' : Type _} {N' : Type _} [MulOneClass M'] [MulOneClass N']
     (f : M →* N) (g : M' →* N') (S : Submonoid N) (S' : Submonoid N') :
@@ -1978,12 +1286,6 @@ theorem prod_map_comap_prod' {M' : Type _} {N' : Type _} [MulOneClass M'] [MulOn
 #align monoid_hom.prod_map_comap_prod' MonoidHom.prod_map_comap_prod'
 #align add_monoid_hom.sum_map_comap_sum' AddMonoidHom.prod_map_comap_prod'
 
-/- warning: monoid_hom.mker_prod_map -> MonoidHom.mker_prod_map 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] {M' : Type.{u3}} {N' : Type.{u4}} [_inst_4 : MulOneClass.{u3} M'] [_inst_5 : MulOneClass.{u4} N'] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2) (g : MonoidHom.{u3, u4} M' N' _inst_4 _inst_5), Eq.{succ (max u1 u3)} (Submonoid.{max u1 u3} (Prod.{u1, u3} M M') (Prod.mulOneClass.{u1, u3} M M' _inst_1 _inst_4)) (MonoidHom.mker.{max u1 u3, max u2 u4, max (max u2 u4) u1 u3} (Prod.{u1, u3} M M') (Prod.{u2, u4} N N') (Prod.mulOneClass.{u1, u3} M M' _inst_1 _inst_4) (Prod.mulOneClass.{u2, u4} N N' _inst_2 _inst_5) (MonoidHom.{max u1 u3, max u2 u4} (Prod.{u1, u3} M M') (Prod.{u2, u4} N N') (Prod.mulOneClass.{u1, u3} M M' _inst_1 _inst_4) (Prod.mulOneClass.{u2, u4} N N' _inst_2 _inst_5)) (MonoidHom.monoidHomClass.{max u1 u3, max u2 u4} (Prod.{u1, u3} M M') (Prod.{u2, u4} N N') (Prod.mulOneClass.{u1, u3} M M' _inst_1 _inst_4) (Prod.mulOneClass.{u2, u4} N N' _inst_2 _inst_5)) (MonoidHom.prodMap.{u1, u3, u2, u4} M M' _inst_1 _inst_4 N N' _inst_2 _inst_5 f g)) (Submonoid.prod.{u1, u3} M M' _inst_1 _inst_4 (MonoidHom.mker.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f) (MonoidHom.mker.{u3, u4, max u4 u3} M' N' _inst_4 _inst_5 (MonoidHom.{u3, u4} M' N' _inst_4 _inst_5) (MonoidHom.monoidHomClass.{u3, u4} M' N' _inst_4 _inst_5) g))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {M' : Type.{u4}} {N' : Type.{u3}} [_inst_4 : MulOneClass.{u4} M'] [_inst_5 : MulOneClass.{u3} N'] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2) (g : MonoidHom.{u4, u3} M' N' _inst_4 _inst_5), Eq.{max (succ u2) (succ u4)} (Submonoid.{max u2 u4} (Prod.{u2, u4} M M') (Prod.instMulOneClassProd.{u2, u4} M M' _inst_1 _inst_4)) (MonoidHom.mker.{max u2 u4, max u1 u3, max (max (max u3 u1) u4) u2} (Prod.{u2, u4} M M') (Prod.{u1, u3} N N') (Prod.instMulOneClassProd.{u2, u4} M M' _inst_1 _inst_4) (Prod.instMulOneClassProd.{u1, u3} N N' _inst_2 _inst_5) (MonoidHom.{max u4 u2, max u3 u1} (Prod.{u2, u4} M M') (Prod.{u1, u3} N N') (Prod.instMulOneClassProd.{u2, u4} M M' _inst_1 _inst_4) (Prod.instMulOneClassProd.{u1, u3} N N' _inst_2 _inst_5)) (MonoidHom.monoidHomClass.{max u2 u4, max u1 u3} (Prod.{u2, u4} M M') (Prod.{u1, u3} N N') (Prod.instMulOneClassProd.{u2, u4} M M' _inst_1 _inst_4) (Prod.instMulOneClassProd.{u1, u3} N N' _inst_2 _inst_5)) (MonoidHom.prodMap.{u2, u4, u1, u3} M M' _inst_1 _inst_4 N N' _inst_2 _inst_5 f g)) (Submonoid.prod.{u2, u4} M M' _inst_1 _inst_4 (MonoidHom.mker.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f) (MonoidHom.mker.{u4, u3, max u4 u3} M' N' _inst_4 _inst_5 (MonoidHom.{u4, u3} M' N' _inst_4 _inst_5) (MonoidHom.monoidHomClass.{u4, u3} M' N' _inst_4 _inst_5) g))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.mker_prod_map MonoidHom.mker_prod_mapₓ'. -/
 @[to_additive]
 theorem mker_prod_map {M' : Type _} {N' : Type _} [MulOneClass M'] [MulOneClass N'] (f : M →* N)
     (g : M' →* N') : (prodMap f g).mker = f.mker.Prod g.mker := by
@@ -1991,34 +1293,16 @@ theorem mker_prod_map {M' : Type _} {N' : Type _} [MulOneClass M'] [MulOneClass
 #align monoid_hom.mker_prod_map MonoidHom.mker_prod_map
 #align add_monoid_hom.mker_sum_map AddMonoidHom.mker_prod_map
 
-/- warning: monoid_hom.mker_inl -> MonoidHom.mker_inl 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], Eq.{succ u1} (Submonoid.{u1} M _inst_1) (MonoidHom.mker.{u1, max u1 u2, max u1 u2} M (Prod.{u1, u2} M N) _inst_1 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.{u1, max u1 u2} M (Prod.{u1, u2} M N) _inst_1 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u1, max u1 u2} M (Prod.{u1, u2} M N) _inst_1 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.inl.{u1, u2} M N _inst_1 _inst_2)) (Bot.bot.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasBot.{u1} M _inst_1))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N], Eq.{succ u2} (Submonoid.{u2} M _inst_1) (MonoidHom.mker.{u2, max u2 u1, max u2 u1} M (Prod.{u2, u1} M N) _inst_1 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.{u2, max u1 u2} M (Prod.{u2, u1} M N) _inst_1 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u2, max u2 u1} M (Prod.{u2, u1} M N) _inst_1 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.inl.{u2, u1} M N _inst_1 _inst_2)) (Bot.bot.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instBotSubmonoid.{u2} M _inst_1))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.mker_inl MonoidHom.mker_inlₓ'. -/
 @[simp, to_additive]
 theorem mker_inl : (inl M N).mker = ⊥ := by ext x; simp [mem_mker]
 #align monoid_hom.mker_inl MonoidHom.mker_inl
 #align add_monoid_hom.mker_inl AddMonoidHom.mker_inl
 
-/- warning: monoid_hom.mker_inr -> MonoidHom.mker_inr 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], Eq.{succ u2} (Submonoid.{u2} N _inst_2) (MonoidHom.mker.{u2, max u1 u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.{u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.inr.{u1, u2} M N _inst_1 _inst_2)) (Bot.bot.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasBot.{u2} N _inst_2))
-but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N], Eq.{succ u2} (Submonoid.{u2} N _inst_2) (MonoidHom.mker.{u2, max u1 u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.instMulOneClassProd.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.{u2, max u2 u1} N (Prod.{u1, u2} M N) _inst_2 (Prod.instMulOneClassProd.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.instMulOneClassProd.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.inr.{u1, u2} M N _inst_1 _inst_2)) (Bot.bot.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instBotSubmonoid.{u2} N _inst_2))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.mker_inr MonoidHom.mker_inrₓ'. -/
 @[simp, to_additive]
 theorem mker_inr : (inr M N).mker = ⊥ := by ext x; simp [mem_mker]
 #align monoid_hom.mker_inr MonoidHom.mker_inr
 #align add_monoid_hom.mker_inr AddMonoidHom.mker_inr
 
-/- warning: monoid_hom.submonoid_comap -> MonoidHom.submonoidComap 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) (N' : Submonoid.{u2} N _inst_2), MonoidHom.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) (Submonoid.comap.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f N')) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) N') (Submonoid.toMulOneClass.{u1} M _inst_1 (Submonoid.comap.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f N')) (Submonoid.toMulOneClass.{u2} N _inst_2 N')
-but is expected to have type
-  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) (N' : Submonoid.{u2} N _inst_2), MonoidHom.{u1, u2} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x (Submonoid.comap.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f N'))) (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) x N')) (Submonoid.toMulOneClass.{u1} M _inst_1 (Submonoid.comap.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f N')) (Submonoid.toMulOneClass.{u2} N _inst_2 N')
-Case conversion may be inaccurate. Consider using '#align monoid_hom.submonoid_comap MonoidHom.submonoidComapₓ'. -/
 /-- The `monoid_hom` from the preimage of a submonoid to itself. -/
 @[to_additive "the `add_monoid_hom` from the preimage of an additive submonoid to itself.", simps]
 def submonoidComap (f : M →* N) (N' : Submonoid N) : N'.comap f →* N'
@@ -2029,12 +1313,6 @@ def submonoidComap (f : M →* N) (N' : Submonoid N) : N'.comap f →* N'
 #align monoid_hom.submonoid_comap MonoidHom.submonoidComap
 #align add_monoid_hom.add_submonoid_comap AddMonoidHom.addSubmonoidComap
 
-/- warning: monoid_hom.submonoid_map -> MonoidHom.submonoidMap 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) (M' : Submonoid.{u1} M _inst_1), MonoidHom.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) M') (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M')) (Submonoid.toMulOneClass.{u1} M _inst_1 M') (Submonoid.toMulOneClass.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M'))
-but is expected to have type
-  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) (M' : Submonoid.{u1} M _inst_1), MonoidHom.{u1, u2} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x M')) (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u1} M _inst_1 M') (Submonoid.toMulOneClass.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M'))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.submonoid_map MonoidHom.submonoidMapₓ'. -/
 /-- The `monoid_hom` from a submonoid to its image.
 See `mul_equiv.submonoid_map` for a variant for `mul_equiv`s. -/
 @[to_additive
@@ -2048,9 +1326,6 @@ def submonoidMap (f : M →* N) (M' : Submonoid M) : M' →* M'.map f
 #align monoid_hom.submonoid_map MonoidHom.submonoidMap
 #align add_monoid_hom.add_submonoid_map AddMonoidHom.addSubmonoidMap
 
-/- warning: monoid_hom.submonoid_map_surjective -> MonoidHom.submonoidMap_surjective is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align monoid_hom.submonoid_map_surjective MonoidHom.submonoidMap_surjectiveₓ'. -/
 @[to_additive]
 theorem submonoidMap_surjective (f : M →* N) (M' : Submonoid M) :
     Function.Surjective (f.submonoidMap M') := by rintro ⟨_, x, hx, rfl⟩; exact ⟨⟨x, hx⟩, rfl⟩
@@ -2063,94 +1338,46 @@ namespace Submonoid
 
 open MonoidHom
 
-/- warning: submonoid.mrange_inl -> Submonoid.mrange_inl 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], Eq.{succ (max u1 u2)} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.mrange.{u1, max u1 u2, max u1 u2} M (Prod.{u1, u2} M N) _inst_1 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.{u1, max u1 u2} M (Prod.{u1, u2} M N) _inst_1 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u1, max u1 u2} M (Prod.{u1, u2} M N) _inst_1 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.inl.{u1, u2} M N _inst_1 _inst_2)) (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 (Top.top.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasTop.{u1} M _inst_1)) (Bot.bot.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasBot.{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], Eq.{max (succ u2) (succ u1)} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.mrange.{u2, max u2 u1, max u2 u1} M (Prod.{u2, u1} M N) _inst_1 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.{u2, max u1 u2} M (Prod.{u2, u1} M N) _inst_1 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u2, max u2 u1} M (Prod.{u2, u1} M N) _inst_1 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.inl.{u2, u1} M N _inst_1 _inst_2)) (Submonoid.prod.{u2, u1} M N _inst_1 _inst_2 (Top.top.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instTopSubmonoid.{u2} M _inst_1)) (Bot.bot.{u1} (Submonoid.{u1} N _inst_2) (Submonoid.instBotSubmonoid.{u1} N _inst_2)))
-Case conversion may be inaccurate. Consider using '#align submonoid.mrange_inl Submonoid.mrange_inlₓ'. -/
 @[to_additive]
 theorem mrange_inl : (inl M N).mrange = prod ⊤ ⊥ := by simpa only [mrange_eq_map] using map_inl ⊤
 #align submonoid.mrange_inl Submonoid.mrange_inl
 #align add_submonoid.mrange_inl AddSubmonoid.mrange_inl
 
-/- warning: submonoid.mrange_inr -> Submonoid.mrange_inr 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], Eq.{succ (max u1 u2)} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.mrange.{u2, max u1 u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.{u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.inr.{u1, u2} M N _inst_1 _inst_2)) (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 (Bot.bot.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasBot.{u1} M _inst_1)) (Top.top.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasTop.{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], Eq.{max (succ u2) (succ u1)} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.mrange.{u1, max u2 u1, max u2 u1} N (Prod.{u2, u1} M N) _inst_2 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.{u1, max u1 u2} N (Prod.{u2, u1} M N) _inst_2 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u1, max u2 u1} N (Prod.{u2, u1} M N) _inst_2 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.inr.{u2, u1} M N _inst_1 _inst_2)) (Submonoid.prod.{u2, u1} M N _inst_1 _inst_2 (Bot.bot.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instBotSubmonoid.{u2} M _inst_1)) (Top.top.{u1} (Submonoid.{u1} N _inst_2) (Submonoid.instTopSubmonoid.{u1} N _inst_2)))
-Case conversion may be inaccurate. Consider using '#align submonoid.mrange_inr Submonoid.mrange_inrₓ'. -/
 @[to_additive]
 theorem mrange_inr : (inr M N).mrange = prod ⊥ ⊤ := by simpa only [mrange_eq_map] using map_inr ⊤
 #align submonoid.mrange_inr Submonoid.mrange_inr
 #align add_submonoid.mrange_inr AddSubmonoid.mrange_inr
 
-/- warning: submonoid.mrange_inl' -> Submonoid.mrange_inl' 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], Eq.{succ (max u1 u2)} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.mrange.{u1, max u1 u2, max u1 u2} M (Prod.{u1, u2} M N) _inst_1 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.{u1, max u1 u2} M (Prod.{u1, u2} M N) _inst_1 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u1, max u1 u2} M (Prod.{u1, u2} M N) _inst_1 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.inl.{u1, u2} M N _inst_1 _inst_2)) (Submonoid.comap.{max u1 u2, u2, max u1 u2} (Prod.{u1, u2} M N) N (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_2 (MonoidHom.{max u1 u2, u2} (Prod.{u1, u2} M N) N (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_2) (MonoidHom.monoidHomClass.{max u1 u2, u2} (Prod.{u1, u2} M N) N (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_2) (MonoidHom.snd.{u1, u2} M N _inst_1 _inst_2) (Bot.bot.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasBot.{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], Eq.{max (succ u2) (succ u1)} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.mrange.{u2, max u2 u1, max u2 u1} M (Prod.{u2, u1} M N) _inst_1 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.{u2, max u1 u2} M (Prod.{u2, u1} M N) _inst_1 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u2, max u2 u1} M (Prod.{u2, u1} M N) _inst_1 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.inl.{u2, u1} M N _inst_1 _inst_2)) (Submonoid.comap.{max u2 u1, u1, max u2 u1} (Prod.{u2, u1} M N) N (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) _inst_2 (MonoidHom.{max u1 u2, u1} (Prod.{u2, u1} M N) N (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) _inst_2) (MonoidHom.monoidHomClass.{max u2 u1, u1} (Prod.{u2, u1} M N) N (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) _inst_2) (MonoidHom.snd.{u2, u1} M N _inst_1 _inst_2) (Bot.bot.{u1} (Submonoid.{u1} N _inst_2) (Submonoid.instBotSubmonoid.{u1} N _inst_2)))
-Case conversion may be inaccurate. Consider using '#align submonoid.mrange_inl' Submonoid.mrange_inl'ₓ'. -/
 @[to_additive]
 theorem mrange_inl' : (inl M N).mrange = comap (snd M N) ⊥ :=
   mrange_inl.trans (top_prod _)
 #align submonoid.mrange_inl' Submonoid.mrange_inl'
 #align add_submonoid.mrange_inl' AddSubmonoid.mrange_inl'
 
-/- warning: submonoid.mrange_inr' -> Submonoid.mrange_inr' 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], Eq.{succ (max u1 u2)} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.mrange.{u2, max u1 u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.{u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.inr.{u1, u2} M N _inst_1 _inst_2)) (Submonoid.comap.{max u1 u2, u1, max u1 u2} (Prod.{u1, u2} M N) M (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_1 (MonoidHom.{max u1 u2, u1} (Prod.{u1, u2} M N) M (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_1) (MonoidHom.monoidHomClass.{max u1 u2, u1} (Prod.{u1, u2} M N) M (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_1) (MonoidHom.fst.{u1, u2} M N _inst_1 _inst_2) (Bot.bot.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasBot.{u1} M _inst_1)))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N], Eq.{max (succ u2) (succ u1)} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.mrange.{u1, max u2 u1, max u2 u1} N (Prod.{u2, u1} M N) _inst_2 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.{u1, max u1 u2} N (Prod.{u2, u1} M N) _inst_2 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u1, max u2 u1} N (Prod.{u2, u1} M N) _inst_2 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.inr.{u2, u1} M N _inst_1 _inst_2)) (Submonoid.comap.{max u2 u1, u2, max u2 u1} (Prod.{u2, u1} M N) M (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) _inst_1 (MonoidHom.{max u1 u2, u2} (Prod.{u2, u1} M N) M (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) _inst_1) (MonoidHom.monoidHomClass.{max u2 u1, u2} (Prod.{u2, u1} M N) M (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) _inst_1) (MonoidHom.fst.{u2, u1} M N _inst_1 _inst_2) (Bot.bot.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instBotSubmonoid.{u2} M _inst_1)))
-Case conversion may be inaccurate. Consider using '#align submonoid.mrange_inr' Submonoid.mrange_inr'ₓ'. -/
 @[to_additive]
 theorem mrange_inr' : (inr M N).mrange = comap (fst M N) ⊥ :=
   mrange_inr.trans (prod_top _)
 #align submonoid.mrange_inr' Submonoid.mrange_inr'
 #align add_submonoid.mrange_inr' AddSubmonoid.mrange_inr'
 
-/- warning: submonoid.mrange_fst -> Submonoid.mrange_fst 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], Eq.{succ u1} (Submonoid.{u1} M _inst_1) (MonoidHom.mrange.{max u1 u2, u1, max u1 u2} (Prod.{u1, u2} M N) M (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_1 (MonoidHom.{max u1 u2, u1} (Prod.{u1, u2} M N) M (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_1) (MonoidHom.monoidHomClass.{max u1 u2, u1} (Prod.{u1, u2} M N) M (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_1) (MonoidHom.fst.{u1, u2} M N _inst_1 _inst_2)) (Top.top.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasTop.{u1} M _inst_1))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N], Eq.{succ u2} (Submonoid.{u2} M _inst_1) (MonoidHom.mrange.{max u2 u1, u2, max u2 u1} (Prod.{u2, u1} M N) M (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) _inst_1 (MonoidHom.{max u1 u2, u2} (Prod.{u2, u1} M N) M (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) _inst_1) (MonoidHom.monoidHomClass.{max u2 u1, u2} (Prod.{u2, u1} M N) M (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) _inst_1) (MonoidHom.fst.{u2, u1} M N _inst_1 _inst_2)) (Top.top.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instTopSubmonoid.{u2} M _inst_1))
-Case conversion may be inaccurate. Consider using '#align submonoid.mrange_fst Submonoid.mrange_fstₓ'. -/
 @[simp, to_additive]
 theorem mrange_fst : (fst M N).mrange = ⊤ :=
   mrange_top_of_surjective (fst M N) <| @Prod.fst_surjective _ _ ⟨1⟩
 #align submonoid.mrange_fst Submonoid.mrange_fst
 #align add_submonoid.mrange_fst AddSubmonoid.mrange_fst
 
-/- warning: submonoid.mrange_snd -> Submonoid.mrange_snd 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], Eq.{succ u2} (Submonoid.{u2} N _inst_2) (MonoidHom.mrange.{max u1 u2, u2, max u1 u2} (Prod.{u1, u2} M N) N (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_2 (MonoidHom.{max u1 u2, u2} (Prod.{u1, u2} M N) N (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_2) (MonoidHom.monoidHomClass.{max u1 u2, u2} (Prod.{u1, u2} M N) N (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_2) (MonoidHom.snd.{u1, u2} M N _inst_1 _inst_2)) (Top.top.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasTop.{u2} N _inst_2))
-but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N], Eq.{succ u2} (Submonoid.{u2} N _inst_2) (MonoidHom.mrange.{max u1 u2, u2, max u1 u2} (Prod.{u1, u2} M N) N (Prod.instMulOneClassProd.{u1, u2} M N _inst_1 _inst_2) _inst_2 (MonoidHom.{max u2 u1, u2} (Prod.{u1, u2} M N) N (Prod.instMulOneClassProd.{u1, u2} M N _inst_1 _inst_2) _inst_2) (MonoidHom.monoidHomClass.{max u1 u2, u2} (Prod.{u1, u2} M N) N (Prod.instMulOneClassProd.{u1, u2} M N _inst_1 _inst_2) _inst_2) (MonoidHom.snd.{u1, u2} M N _inst_1 _inst_2)) (Top.top.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instTopSubmonoid.{u2} N _inst_2))
-Case conversion may be inaccurate. Consider using '#align submonoid.mrange_snd Submonoid.mrange_sndₓ'. -/
 @[simp, to_additive]
 theorem mrange_snd : (snd M N).mrange = ⊤ :=
   mrange_top_of_surjective (snd M N) <| @Prod.snd_surjective _ _ ⟨1⟩
 #align submonoid.mrange_snd Submonoid.mrange_snd
 #align add_submonoid.mrange_snd AddSubmonoid.mrange_snd
 
-/- warning: submonoid.prod_eq_bot_iff -> Submonoid.prod_eq_bot_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] {s : Submonoid.{u1} M _inst_1} {t : Submonoid.{u2} N _inst_2}, Iff (Eq.{succ (max u1 u2)} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 s t) (Bot.bot.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Submonoid.hasBot.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)))) (And (Eq.{succ u1} (Submonoid.{u1} M _inst_1) s (Bot.bot.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasBot.{u1} M _inst_1))) (Eq.{succ u2} (Submonoid.{u2} N _inst_2) t (Bot.bot.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasBot.{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] {s : Submonoid.{u2} M _inst_1} {t : Submonoid.{u1} N _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Submonoid.prod.{u2, u1} M N _inst_1 _inst_2 s t) (Bot.bot.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Submonoid.instBotSubmonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)))) (And (Eq.{succ u2} (Submonoid.{u2} M _inst_1) s (Bot.bot.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instBotSubmonoid.{u2} M _inst_1))) (Eq.{succ u1} (Submonoid.{u1} N _inst_2) t (Bot.bot.{u1} (Submonoid.{u1} N _inst_2) (Submonoid.instBotSubmonoid.{u1} N _inst_2))))
-Case conversion may be inaccurate. Consider using '#align submonoid.prod_eq_bot_iff Submonoid.prod_eq_bot_iffₓ'. -/
 @[to_additive]
 theorem prod_eq_bot_iff {s : Submonoid M} {t : Submonoid N} : s.Prod t = ⊥ ↔ s = ⊥ ∧ t = ⊥ := by
   simp only [eq_bot_iff, prod_le_iff, (gc_map_comap _).le_iff_le, comap_bot', mker_inl, mker_inr]
 #align submonoid.prod_eq_bot_iff Submonoid.prod_eq_bot_iff
 #align add_submonoid.sum_eq_bot_iff AddSubmonoid.prod_eq_bot_iff
 
-/- warning: submonoid.prod_eq_top_iff -> Submonoid.prod_eq_top_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] {s : Submonoid.{u1} M _inst_1} {t : Submonoid.{u2} N _inst_2}, Iff (Eq.{succ (max u1 u2)} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 s t) (Top.top.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Submonoid.hasTop.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)))) (And (Eq.{succ u1} (Submonoid.{u1} M _inst_1) s (Top.top.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasTop.{u1} M _inst_1))) (Eq.{succ u2} (Submonoid.{u2} N _inst_2) t (Top.top.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasTop.{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] {s : Submonoid.{u2} M _inst_1} {t : Submonoid.{u1} N _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Submonoid.prod.{u2, u1} M N _inst_1 _inst_2 s t) (Top.top.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Submonoid.instTopSubmonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)))) (And (Eq.{succ u2} (Submonoid.{u2} M _inst_1) s (Top.top.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instTopSubmonoid.{u2} M _inst_1))) (Eq.{succ u1} (Submonoid.{u1} N _inst_2) t (Top.top.{u1} (Submonoid.{u1} N _inst_2) (Submonoid.instTopSubmonoid.{u1} N _inst_2))))
-Case conversion may be inaccurate. Consider using '#align submonoid.prod_eq_top_iff Submonoid.prod_eq_top_iffₓ'. -/
 @[to_additive]
 theorem prod_eq_top_iff {s : Submonoid M} {t : Submonoid N} : s.Prod t = ⊤ ↔ s = ⊤ ∧ t = ⊤ := by
   simp only [eq_top_iff, le_prod_iff, ← (gc_map_comap _).le_iff_le, ← mrange_eq_map, mrange_fst,
@@ -2158,24 +1385,12 @@ theorem prod_eq_top_iff {s : Submonoid M} {t : Submonoid N} : s.Prod t = ⊤ ↔
 #align submonoid.prod_eq_top_iff Submonoid.prod_eq_top_iff
 #align add_submonoid.sum_eq_top_iff AddSubmonoid.prod_eq_top_iff
 
-/- warning: submonoid.mrange_inl_sup_mrange_inr -> Submonoid.mrange_inl_sup_mrange_inr 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], Eq.{succ (max u1 u2)} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Sup.sup.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (SemilatticeSup.toHasSup.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Lattice.toSemilatticeSup.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (CompleteLattice.toLattice.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Submonoid.completeLattice.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2))))) (MonoidHom.mrange.{u1, max u1 u2, max u1 u2} M (Prod.{u1, u2} M N) _inst_1 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.{u1, max u1 u2} M (Prod.{u1, u2} M N) _inst_1 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u1, max u1 u2} M (Prod.{u1, u2} M N) _inst_1 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.inl.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.mrange.{u2, max u1 u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.{u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.inr.{u1, u2} M N _inst_1 _inst_2))) (Top.top.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Submonoid.hasTop.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{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], Eq.{max (succ u2) (succ u1)} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Sup.sup.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (SemilatticeSup.toSup.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Lattice.toSemilatticeSup.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (CompleteLattice.toLattice.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Submonoid.instCompleteLatticeSubmonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2))))) (MonoidHom.mrange.{u2, max u2 u1, max u2 u1} M (Prod.{u2, u1} M N) _inst_1 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.{u2, max u1 u2} M (Prod.{u2, u1} M N) _inst_1 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u2, max u2 u1} M (Prod.{u2, u1} M N) _inst_1 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.inl.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.mrange.{u1, max u2 u1, max u2 u1} N (Prod.{u2, u1} M N) _inst_2 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.{u1, max u1 u2} N (Prod.{u2, u1} M N) _inst_2 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u1, max u2 u1} N (Prod.{u2, u1} M N) _inst_2 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.inr.{u2, u1} M N _inst_1 _inst_2))) (Top.top.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Submonoid.instTopSubmonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)))
-Case conversion may be inaccurate. Consider using '#align submonoid.mrange_inl_sup_mrange_inr Submonoid.mrange_inl_sup_mrange_inrₓ'. -/
 @[simp, to_additive]
 theorem mrange_inl_sup_mrange_inr : (inl M N).mrange ⊔ (inr M N).mrange = ⊤ := by
   simp only [mrange_inl, mrange_inr, prod_bot_sup_bot_prod, top_prod_top]
 #align submonoid.mrange_inl_sup_mrange_inr Submonoid.mrange_inl_sup_mrange_inr
 #align add_submonoid.mrange_inl_sup_mrange_inr AddSubmonoid.mrange_inl_sup_mrange_inr
 
-/- warning: submonoid.inclusion -> Submonoid.inclusion is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {S : Submonoid.{u1} M _inst_1} {T : Submonoid.{u1} M _inst_1}, (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S T) -> (MonoidHom.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) T) (Submonoid.toMulOneClass.{u1} M _inst_1 S) (Submonoid.toMulOneClass.{u1} M _inst_1 T))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {S : Submonoid.{u1} M _inst_1} {T : Submonoid.{u1} M _inst_1}, (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) S T) -> (MonoidHom.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x T)) (Submonoid.toMulOneClass.{u1} M _inst_1 S) (Submonoid.toMulOneClass.{u1} M _inst_1 T))
-Case conversion may be inaccurate. Consider using '#align submonoid.inclusion Submonoid.inclusionₓ'. -/
 /-- The monoid hom associated to an inclusion of submonoids. -/
 @[to_additive "The `add_monoid` hom associated to an inclusion of submonoids."]
 def inclusion {S T : Submonoid M} (h : S ≤ T) : S →* T :=
@@ -2183,48 +1398,24 @@ def inclusion {S T : Submonoid M} (h : S ≤ T) : S →* T :=
 #align submonoid.inclusion Submonoid.inclusion
 #align add_submonoid.inclusion AddSubmonoid.inclusion
 
-/- warning: submonoid.range_subtype -> Submonoid.range_subtype is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (s : Submonoid.{u1} M _inst_1), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (MonoidHom.mrange.{u1, u1, u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) s) M (Submonoid.toMulOneClass.{u1} M _inst_1 s) _inst_1 (MonoidHom.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) s) M (Submonoid.toMulOneClass.{u1} M _inst_1 s) _inst_1) (MonoidHom.monoidHomClass.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) s) M (Submonoid.toMulOneClass.{u1} M _inst_1 s) _inst_1) (Submonoid.subtype.{u1} M _inst_1 s)) s
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (s : Submonoid.{u1} M _inst_1), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (MonoidHom.mrange.{u1, u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x s)) M (Submonoid.toMulOneClass.{u1} M _inst_1 s) _inst_1 (MonoidHom.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x s)) M (Submonoid.toMulOneClass.{u1} M _inst_1 s) _inst_1) (MonoidHom.monoidHomClass.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x s)) M (Submonoid.toMulOneClass.{u1} M _inst_1 s) _inst_1) (Submonoid.subtype.{u1} M _inst_1 s)) s
-Case conversion may be inaccurate. Consider using '#align submonoid.range_subtype Submonoid.range_subtypeₓ'. -/
 @[simp, to_additive]
 theorem range_subtype (s : Submonoid M) : s.Subtype.mrange = s :=
   SetLike.coe_injective <| (coe_mrange _).trans <| Subtype.range_coe
 #align submonoid.range_subtype Submonoid.range_subtype
 #align add_submonoid.range_subtype AddSubmonoid.range_subtype
 
-/- warning: submonoid.eq_top_iff' -> Submonoid.eq_top_iff' is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1), Iff (Eq.{succ u1} (Submonoid.{u1} M _inst_1) S (Top.top.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasTop.{u1} M _inst_1))) (forall (x : M), Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S)
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1), Iff (Eq.{succ u1} (Submonoid.{u1} M _inst_1) S (Top.top.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instTopSubmonoid.{u1} M _inst_1))) (forall (x : M), Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)
-Case conversion may be inaccurate. Consider using '#align submonoid.eq_top_iff' Submonoid.eq_top_iff'ₓ'. -/
 @[to_additive]
 theorem eq_top_iff' : S = ⊤ ↔ ∀ x : M, x ∈ S :=
   eq_top_iff.trans ⟨fun h m => h <| mem_top m, fun h m _ => h m⟩
 #align submonoid.eq_top_iff' Submonoid.eq_top_iff'
 #align add_submonoid.eq_top_iff' AddSubmonoid.eq_top_iff'
 
-/- warning: submonoid.eq_bot_iff_forall -> Submonoid.eq_bot_iff_forall is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1), Iff (Eq.{succ u1} (Submonoid.{u1} M _inst_1) S (Bot.bot.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasBot.{u1} M _inst_1))) (forall (x : M), (Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S) -> (Eq.{succ u1} M x (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M _inst_1))))))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1), Iff (Eq.{succ u1} (Submonoid.{u1} M _inst_1) S (Bot.bot.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instBotSubmonoid.{u1} M _inst_1))) (forall (x : M), (Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S) -> (Eq.{succ u1} M x (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (MulOneClass.toOne.{u1} M _inst_1)))))
-Case conversion may be inaccurate. Consider using '#align submonoid.eq_bot_iff_forall Submonoid.eq_bot_iff_forallₓ'. -/
 @[to_additive]
 theorem eq_bot_iff_forall : S = ⊥ ↔ ∀ x ∈ S, x = (1 : M) :=
   SetLike.ext_iff.trans <| by simp (config := { contextual := true }) [iff_def, S.one_mem]
 #align submonoid.eq_bot_iff_forall Submonoid.eq_bot_iff_forall
 #align add_submonoid.eq_bot_iff_forall AddSubmonoid.eq_bot_iff_forall
 
-/- warning: submonoid.nontrivial_iff_exists_ne_one -> Submonoid.nontrivial_iff_exists_ne_one is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1), Iff (Nontrivial.{u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S)) (Exists.{succ u1} M (fun (x : M) => Exists.{0} (Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S) (fun (H : Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S) => Ne.{succ u1} M x (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M _inst_1)))))))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1), Iff (Nontrivial.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S))) (Exists.{succ u1} M (fun (x : M) => And (Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S) (Ne.{succ u1} M x (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (MulOneClass.toOne.{u1} M _inst_1))))))
-Case conversion may be inaccurate. Consider using '#align submonoid.nontrivial_iff_exists_ne_one Submonoid.nontrivial_iff_exists_ne_oneₓ'. -/
 @[to_additive]
 theorem nontrivial_iff_exists_ne_one (S : Submonoid M) : Nontrivial S ↔ ∃ x ∈ S, x ≠ (1 : M) :=
   calc
@@ -2235,12 +1426,6 @@ theorem nontrivial_iff_exists_ne_one (S : Submonoid M) : Nontrivial S ↔ ∃ x
 #align submonoid.nontrivial_iff_exists_ne_one Submonoid.nontrivial_iff_exists_ne_one
 #align add_submonoid.nontrivial_iff_exists_ne_zero AddSubmonoid.nontrivial_iff_exists_ne_zero
 
-/- warning: submonoid.bot_or_nontrivial -> Submonoid.bot_or_nontrivial is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1), Or (Eq.{succ u1} (Submonoid.{u1} M _inst_1) S (Bot.bot.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasBot.{u1} M _inst_1))) (Nontrivial.{u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1), Or (Eq.{succ u1} (Submonoid.{u1} M _inst_1) S (Bot.bot.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instBotSubmonoid.{u1} M _inst_1))) (Nontrivial.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)))
-Case conversion may be inaccurate. Consider using '#align submonoid.bot_or_nontrivial Submonoid.bot_or_nontrivialₓ'. -/
 /-- A submonoid is either the trivial submonoid or nontrivial. -/
 @[to_additive "An additive submonoid is either the trivial additive submonoid or nontrivial."]
 theorem bot_or_nontrivial (S : Submonoid M) : S = ⊥ ∨ Nontrivial S := by
@@ -2248,12 +1433,6 @@ theorem bot_or_nontrivial (S : Submonoid M) : S = ⊥ ∨ Nontrivial S := by
 #align submonoid.bot_or_nontrivial Submonoid.bot_or_nontrivial
 #align add_submonoid.bot_or_nontrivial AddSubmonoid.bot_or_nontrivial
 
-/- warning: submonoid.bot_or_exists_ne_one -> Submonoid.bot_or_exists_ne_one is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1), Or (Eq.{succ u1} (Submonoid.{u1} M _inst_1) S (Bot.bot.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasBot.{u1} M _inst_1))) (Exists.{succ u1} M (fun (x : M) => Exists.{0} (Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S) (fun (H : Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S) => Ne.{succ u1} M x (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M _inst_1)))))))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1), Or (Eq.{succ u1} (Submonoid.{u1} M _inst_1) S (Bot.bot.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instBotSubmonoid.{u1} M _inst_1))) (Exists.{succ u1} M (fun (x : M) => And (Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S) (Ne.{succ u1} M x (OfNat.ofNat.{u1} M 1 (One.toOfNat1.{u1} M (MulOneClass.toOne.{u1} M _inst_1))))))
-Case conversion may be inaccurate. Consider using '#align submonoid.bot_or_exists_ne_one Submonoid.bot_or_exists_ne_oneₓ'. -/
 /-- A submonoid is either the trivial submonoid or contains a nonzero element. -/
 @[to_additive
       "An additive submonoid is either the trivial additive submonoid or contains a nonzero\nelement."]
@@ -2268,12 +1447,6 @@ namespace MulEquiv
 
 variable {S} {T : Submonoid M}
 
-/- warning: mul_equiv.submonoid_congr -> MulEquiv.submonoidCongr is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {S : Submonoid.{u1} M _inst_1} {T : Submonoid.{u1} M _inst_1}, (Eq.{succ u1} (Submonoid.{u1} M _inst_1) S T) -> (MulEquiv.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) T) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u1} M _inst_1 T))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {S : Submonoid.{u1} M _inst_1} {T : Submonoid.{u1} M _inst_1}, (Eq.{succ u1} (Submonoid.{u1} M _inst_1) S T) -> (MulEquiv.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x T)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u1} M _inst_1 T))
-Case conversion may be inaccurate. Consider using '#align mul_equiv.submonoid_congr MulEquiv.submonoidCongrₓ'. -/
 /-- Makes the identity isomorphism from a proof that two submonoids of a multiplicative
     monoid are equal. -/
 @[to_additive
@@ -2283,12 +1456,6 @@ def submonoidCongr (h : S = T) : S ≃* T :=
 #align mul_equiv.submonoid_congr MulEquiv.submonoidCongr
 #align add_equiv.add_submonoid_congr AddEquiv.addSubmonoidCongr
 
-/- warning: mul_equiv.of_left_inverse' -> MulEquiv.ofLeftInverse' 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 : N -> M}, (Function.LeftInverse.{succ u1, succ u2} M N 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)) -> (MulEquiv.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)) (MulOneClass.toHasMul.{u1} M _inst_1) (Submonoid.mul.{u2} N _inst_2 (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)))
-but is expected to have type
-  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 : N -> M}, (Function.LeftInverse.{succ u1, succ u2} M N g (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, 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 u1 u2, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u1 u2, 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))) f)) -> (MulEquiv.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f))) (MulOneClass.toMul.{u1} M _inst_1) (Submonoid.mul.{u2} N _inst_2 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)))
-Case conversion may be inaccurate. Consider using '#align mul_equiv.of_left_inverse' MulEquiv.ofLeftInverse'ₓ'. -/
 -- this name is primed so that the version to `f.range` instead of `f.mrange` can be unprimed.
 /-- A monoid homomorphism `f : M →* N` with a left-inverse `g : N → M` defines a multiplicative
 equivalence between `M` and `f.mrange`.
@@ -2309,12 +1476,6 @@ def ofLeftInverse' (f : M →* N) {g : N → M} (h : Function.LeftInverse g f) :
 #align mul_equiv.of_left_inverse' MulEquiv.ofLeftInverse'
 #align add_equiv.of_left_inverse' AddEquiv.ofLeftInverse'
 
-/- warning: mul_equiv.submonoid_map -> MulEquiv.submonoidMap 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] (e : MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (S : Submonoid.{u1} M _inst_1), MulEquiv.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S))
-but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (e : MulEquiv.{u1, u2} M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2)) (S : Submonoid.{u1} M _inst_1), MulEquiv.{u1, u2} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S))
-Case conversion may be inaccurate. Consider using '#align mul_equiv.submonoid_map MulEquiv.submonoidMapₓ'. -/
 /-- A `mul_equiv` `φ` between two monoids `M` and `N` induces a `mul_equiv` between
 a submonoid `S ≤ M` and the submonoid `φ(S) ≤ N`.
 See `monoid_hom.submonoid_map` for a variant for `monoid_hom`s. -/
@@ -2325,9 +1486,6 @@ def submonoidMap (e : M ≃* N) (S : Submonoid M) : S ≃* S.map e.toMonoidHom :
 #align mul_equiv.submonoid_map MulEquiv.submonoidMap
 #align add_equiv.add_submonoid_map AddEquiv.addSubmonoidMap
 
-/- warning: mul_equiv.coe_submonoid_map_apply -> MulEquiv.coe_submonoidMap_apply is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align mul_equiv.coe_submonoid_map_apply MulEquiv.coe_submonoidMap_applyₓ'. -/
 @[simp, to_additive]
 theorem coe_submonoidMap_apply (e : M ≃* N) (S : Submonoid M) (g : S) :
     ((submonoidMap e S g : S.map (e : M →* N)) : N) = e g :=
@@ -2335,9 +1493,6 @@ theorem coe_submonoidMap_apply (e : M ≃* N) (S : Submonoid M) (g : S) :
 #align mul_equiv.coe_submonoid_map_apply MulEquiv.coe_submonoidMap_apply
 #align add_equiv.coe_add_submonoid_map_apply AddEquiv.coe_addSubmonoidMap_apply
 
-/- warning: mul_equiv.submonoid_map_symm_apply -> MulEquiv.submonoidMap_symm_apply is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align mul_equiv.submonoid_map_symm_apply MulEquiv.submonoidMap_symm_applyₓ'. -/
 @[simp, to_additive AddEquiv.add_submonoid_map_symm_apply]
 theorem submonoidMap_symm_apply (e : M ≃* N) (S : Submonoid M) (g : S.map (e : M →* N)) :
     (e.submonoidMap S).symm g = ⟨e.symm g, SetLike.mem_coe.1 <| Set.mem_image_equiv.1 g.2⟩ :=
@@ -2347,12 +1502,6 @@ theorem submonoidMap_symm_apply (e : M ≃* N) (S : Submonoid M) (g : S.map (e :
 
 end MulEquiv
 
-/- warning: submonoid.equiv_map_of_injective_coe_mul_equiv -> Submonoid.equivMapOfInjective_coe_mulEquiv 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] (S : Submonoid.{u1} M _inst_1) (e : MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)), Eq.{max (succ u1) (succ u2)} (MulEquiv.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S))) (Submonoid.equivMapOfInjective.{u1, u2} M N _inst_1 _inst_2 S ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) (EquivLike.injective.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N (MulEquivClass.toEquivLike.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2))) e)) (MulEquiv.submonoidMap.{u1, u2} M N _inst_1 _inst_2 e S)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (S : Submonoid.{u2} M _inst_1) (e : MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)), Eq.{max (succ u2) (succ u1)} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) (Submonoid.equivMapOfInjective.{u2, u1} M N _inst_1 _inst_2 S (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) (EquivLike.injective.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N (MulEquivClass.toEquivLike.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e)) (MulEquiv.submonoidMap.{u2, u1} M N _inst_1 _inst_2 e S)
-Case conversion may be inaccurate. Consider using '#align submonoid.equiv_map_of_injective_coe_mul_equiv Submonoid.equivMapOfInjective_coe_mulEquivₓ'. -/
 @[simp, to_additive]
 theorem Submonoid.equivMapOfInjective_coe_mulEquiv (e : M ≃* N) :
     S.equivMapOfInjective (e : M →* N) (EquivLike.injective e) = e.submonoidMap S := by ext; rfl
@@ -2383,12 +1532,6 @@ variable [MulOneClass M']
 instance [SMul M' α] (S : Submonoid M') : SMul S α :=
   SMul.comp _ S.Subtype
 
-/- warning: submonoid.smul_comm_class_left -> Submonoid.smulCommClass_left is a dubious translation:
-lean 3 declaration is
-  forall {M' : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_4 : MulOneClass.{u1} M'] [_inst_5 : SMul.{u1, u3} M' β] [_inst_6 : SMul.{u2, u3} α β] [_inst_7 : SMulCommClass.{u1, u2, u3} M' α β _inst_5 _inst_6] (S : Submonoid.{u1} M' _inst_4), SMulCommClass.{u1, u2, u3} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M' _inst_4) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M' _inst_4) M' (Submonoid.setLike.{u1} M' _inst_4)) S) α β (Submonoid.hasSmul.{u1, u3} M' β _inst_4 _inst_5 S) _inst_6
-but is expected to have type
-  forall {M' : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_4 : MulOneClass.{u1} M'] [_inst_5 : SMul.{u1, u3} M' β] [_inst_6 : SMul.{u2, u3} α β] [_inst_7 : SMulCommClass.{u1, u2, u3} M' α β _inst_5 _inst_6] (S : Submonoid.{u1} M' _inst_4), SMulCommClass.{u1, u2, u3} (Subtype.{succ u1} M' (fun (x : M') => Membership.mem.{u1, u1} M' (Submonoid.{u1} M' _inst_4) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M' _inst_4) M' (Submonoid.instSetLikeSubmonoid.{u1} M' _inst_4)) x S)) α β (Submonoid.smul.{u1, u3} M' β _inst_4 _inst_5 S) _inst_6
-Case conversion may be inaccurate. Consider using '#align submonoid.smul_comm_class_left Submonoid.smulCommClass_leftₓ'. -/
 @[to_additive]
 instance smulCommClass_left [SMul M' β] [SMul α β] [SMulCommClass M' α β] (S : Submonoid M') :
     SMulCommClass S α β :=
@@ -2396,12 +1539,6 @@ instance smulCommClass_left [SMul M' β] [SMul α β] [SMulCommClass M' α β] (
 #align submonoid.smul_comm_class_left Submonoid.smulCommClass_left
 #align add_submonoid.vadd_comm_class_left AddSubmonoid.vaddCommClass_left
 
-/- warning: submonoid.smul_comm_class_right -> Submonoid.smulCommClass_right is a dubious translation:
-lean 3 declaration is
-  forall {M' : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_4 : MulOneClass.{u1} M'] [_inst_5 : SMul.{u2, u3} α β] [_inst_6 : SMul.{u1, u3} M' β] [_inst_7 : SMulCommClass.{u2, u1, u3} α M' β _inst_5 _inst_6] (S : Submonoid.{u1} M' _inst_4), SMulCommClass.{u2, u1, u3} α (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M' _inst_4) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M' _inst_4) M' (Submonoid.setLike.{u1} M' _inst_4)) S) β _inst_5 (Submonoid.hasSmul.{u1, u3} M' β _inst_4 _inst_6 S)
-but is expected to have type
-  forall {M' : Type.{u1}} {α : Type.{u2}} {β : Type.{u3}} [_inst_4 : MulOneClass.{u1} M'] [_inst_5 : SMul.{u2, u3} α β] [_inst_6 : SMul.{u1, u3} M' β] [_inst_7 : SMulCommClass.{u2, u1, u3} α M' β _inst_5 _inst_6] (S : Submonoid.{u1} M' _inst_4), SMulCommClass.{u2, u1, u3} α (Subtype.{succ u1} M' (fun (x : M') => Membership.mem.{u1, u1} M' (Submonoid.{u1} M' _inst_4) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M' _inst_4) M' (Submonoid.instSetLikeSubmonoid.{u1} M' _inst_4)) x S)) β _inst_5 (Submonoid.smul.{u1, u3} M' β _inst_4 _inst_6 S)
-Case conversion may be inaccurate. Consider using '#align submonoid.smul_comm_class_right Submonoid.smulCommClass_rightₓ'. -/
 @[to_additive]
 instance smulCommClass_right [SMul α β] [SMul M' β] [SMulCommClass α M' β] (S : Submonoid M') :
     SMulCommClass α S β :=
@@ -2414,12 +1551,6 @@ instance [SMul α β] [SMul M' α] [SMul M' β] [IsScalarTower M' α β] (S : Su
     IsScalarTower S α β :=
   ⟨fun a => (smul_assoc (a : M') : _)⟩
 
-/- warning: submonoid.smul_def -> Submonoid.smul_def is a dubious translation:
-lean 3 declaration is
-  forall {M' : Type.{u1}} {α : Type.{u2}} [_inst_4 : MulOneClass.{u1} M'] [_inst_5 : SMul.{u1, u2} M' α] {S : Submonoid.{u1} M' _inst_4} (g : coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M' _inst_4) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M' _inst_4) M' (Submonoid.setLike.{u1} M' _inst_4)) S) (m : α), Eq.{succ u2} α (SMul.smul.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M' _inst_4) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M' _inst_4) M' (Submonoid.setLike.{u1} M' _inst_4)) S) α (Submonoid.hasSmul.{u1, u2} M' α _inst_4 _inst_5 S) g m) (SMul.smul.{u1, u2} M' α _inst_5 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M' _inst_4) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M' _inst_4) M' (Submonoid.setLike.{u1} M' _inst_4)) S) M' (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M' _inst_4) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M' _inst_4) M' (Submonoid.setLike.{u1} M' _inst_4)) S) M' (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M' _inst_4) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M' _inst_4) M' (Submonoid.setLike.{u1} M' _inst_4)) S) M' (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M' _inst_4) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M' _inst_4) M' (Submonoid.setLike.{u1} M' _inst_4)) S) M' (coeSubtype.{succ u1} M' (fun (x : M') => Membership.Mem.{u1, u1} M' (Submonoid.{u1} M' _inst_4) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M' _inst_4) M' (Submonoid.setLike.{u1} M' _inst_4)) x S))))) g) m)
-but is expected to have type
-  forall {M' : Type.{u2}} {α : Type.{u1}} [_inst_4 : MulOneClass.{u2} M'] [_inst_5 : SMul.{u2, u1} M' α] {S : Submonoid.{u2} M' _inst_4} (g : Subtype.{succ u2} M' (fun (x : M') => Membership.mem.{u2, u2} M' (Submonoid.{u2} M' _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M' _inst_4) M' (Submonoid.instSetLikeSubmonoid.{u2} M' _inst_4)) x S)) (m : α), Eq.{succ u1} α (HSMul.hSMul.{u2, u1, u1} (Subtype.{succ u2} M' (fun (x : M') => Membership.mem.{u2, u2} M' (Submonoid.{u2} M' _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M' _inst_4) M' (Submonoid.instSetLikeSubmonoid.{u2} M' _inst_4)) x S)) α α (instHSMul.{u2, u1} (Subtype.{succ u2} M' (fun (x : M') => Membership.mem.{u2, u2} M' (Submonoid.{u2} M' _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M' _inst_4) M' (Submonoid.instSetLikeSubmonoid.{u2} M' _inst_4)) x S)) α (Submonoid.smul.{u2, u1} M' α _inst_4 _inst_5 S)) g m) (HSMul.hSMul.{u2, u1, u1} M' α α (instHSMul.{u2, u1} M' α _inst_5) (Subtype.val.{succ u2} M' (fun (x : M') => Membership.mem.{u2, u2} M' (Set.{u2} M') (Set.instMembershipSet.{u2} M') x (SetLike.coe.{u2, u2} (Submonoid.{u2} M' _inst_4) M' (Submonoid.instSetLikeSubmonoid.{u2} M' _inst_4) S)) g) m)
-Case conversion may be inaccurate. Consider using '#align submonoid.smul_def Submonoid.smul_defₓ'. -/
 @[to_additive]
 theorem smul_def [SMul M' α] {S : Submonoid M'} (g : S) (m : α) : g • m = (g : M') • m :=
   rfl
Diff
@@ -1573,12 +1573,9 @@ theorem le_prod_iff {s : Submonoid M} {t : Submonoid N} {u : Submonoid (M × N)}
   constructor
   · intro h
     constructor
-    · rintro x ⟨⟨y1, y2⟩, ⟨hy1, rfl⟩⟩
-      exact (h hy1).1
-    · rintro x ⟨⟨y1, y2⟩, ⟨hy1, rfl⟩⟩
-      exact (h hy1).2
-  · rintro ⟨hH, hK⟩ ⟨x1, x2⟩ h
-    exact ⟨hH ⟨_, h, rfl⟩, hK ⟨_, h, rfl⟩⟩
+    · rintro x ⟨⟨y1, y2⟩, ⟨hy1, rfl⟩⟩; exact (h hy1).1
+    · rintro x ⟨⟨y1, y2⟩, ⟨hy1, rfl⟩⟩; exact (h hy1).2
+  · rintro ⟨hH, hK⟩ ⟨x1, x2⟩ h; exact ⟨hH ⟨_, h, rfl⟩, hK ⟨_, h, rfl⟩⟩
 #align submonoid.le_prod_iff Submonoid.le_prod_iff
 #align add_submonoid.le_prod_iff AddSubmonoid.le_prod_iff
 
@@ -1595,19 +1592,11 @@ theorem prod_le_iff {s : Submonoid M} {t : Submonoid N} {u : Submonoid (M × N)}
   constructor
   · intro h
     constructor
-    · rintro _ ⟨x, hx, rfl⟩
-      apply h
-      exact ⟨hx, Submonoid.one_mem _⟩
-    · rintro _ ⟨x, hx, rfl⟩
-      apply h
-      exact ⟨Submonoid.one_mem _, hx⟩
+    · rintro _ ⟨x, hx, rfl⟩; apply h; exact ⟨hx, Submonoid.one_mem _⟩
+    · rintro _ ⟨x, hx, rfl⟩; apply h; exact ⟨Submonoid.one_mem _, hx⟩
   · rintro ⟨hH, hK⟩ ⟨x1, x2⟩ ⟨h1, h2⟩
-    have h1' : inl M N x1 ∈ u := by
-      apply hH
-      simpa using h1
-    have h2' : inr M N x2 ∈ u := by
-      apply hK
-      simpa using h2
+    have h1' : inl M N x1 ∈ u := by apply hH; simpa using h1
+    have h2' : inr M N x2 ∈ u := by apply hK; simpa using h2
     simpa using Submonoid.mul_mem _ h1' h2'
 #align submonoid.prod_le_iff Submonoid.prod_le_iff
 #align add_submonoid.prod_le_iff AddSubmonoid.prod_le_iff
@@ -1971,9 +1960,7 @@ but is expected to have type
   forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N], Eq.{succ u2} (Submonoid.{u2} M _inst_1) (MonoidHom.mker.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} 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)))) (Top.top.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instTopSubmonoid.{u2} M _inst_1))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.mker_one MonoidHom.mker_oneₓ'. -/
 @[simp, to_additive]
-theorem mker_one : (1 : M →* N).mker = ⊤ := by
-  ext
-  simp [mem_mker]
+theorem mker_one : (1 : M →* N).mker = ⊤ := by ext; simp [mem_mker]
 #align monoid_hom.mker_one MonoidHom.mker_one
 #align add_monoid_hom.mker_zero AddMonoidHom.mker_zero
 
@@ -2011,9 +1998,7 @@ but is expected to have type
   forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N], Eq.{succ u2} (Submonoid.{u2} M _inst_1) (MonoidHom.mker.{u2, max u2 u1, max u2 u1} M (Prod.{u2, u1} M N) _inst_1 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.{u2, max u1 u2} M (Prod.{u2, u1} M N) _inst_1 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u2, max u2 u1} M (Prod.{u2, u1} M N) _inst_1 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.inl.{u2, u1} M N _inst_1 _inst_2)) (Bot.bot.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instBotSubmonoid.{u2} M _inst_1))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.mker_inl MonoidHom.mker_inlₓ'. -/
 @[simp, to_additive]
-theorem mker_inl : (inl M N).mker = ⊥ := by
-  ext x
-  simp [mem_mker]
+theorem mker_inl : (inl M N).mker = ⊥ := by ext x; simp [mem_mker]
 #align monoid_hom.mker_inl MonoidHom.mker_inl
 #align add_monoid_hom.mker_inl AddMonoidHom.mker_inl
 
@@ -2024,9 +2009,7 @@ but is expected to have type
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N], Eq.{succ u2} (Submonoid.{u2} N _inst_2) (MonoidHom.mker.{u2, max u1 u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.instMulOneClassProd.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.{u2, max u2 u1} N (Prod.{u1, u2} M N) _inst_2 (Prod.instMulOneClassProd.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.instMulOneClassProd.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.inr.{u1, u2} M N _inst_1 _inst_2)) (Bot.bot.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instBotSubmonoid.{u2} N _inst_2))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.mker_inr MonoidHom.mker_inrₓ'. -/
 @[simp, to_additive]
-theorem mker_inr : (inr M N).mker = ⊥ := by
-  ext x
-  simp [mem_mker]
+theorem mker_inr : (inr M N).mker = ⊥ := by ext x; simp [mem_mker]
 #align monoid_hom.mker_inr MonoidHom.mker_inr
 #align add_monoid_hom.mker_inr AddMonoidHom.mker_inr
 
@@ -2070,10 +2053,7 @@ def submonoidMap (f : M →* N) (M' : Submonoid M) : M' →* M'.map f
 Case conversion may be inaccurate. Consider using '#align monoid_hom.submonoid_map_surjective MonoidHom.submonoidMap_surjectiveₓ'. -/
 @[to_additive]
 theorem submonoidMap_surjective (f : M →* N) (M' : Submonoid M) :
-    Function.Surjective (f.submonoidMap M') :=
-  by
-  rintro ⟨_, x, hx, rfl⟩
-  exact ⟨⟨x, hx⟩, rfl⟩
+    Function.Surjective (f.submonoidMap M') := by rintro ⟨_, x, hx, rfl⟩; exact ⟨⟨x, hx⟩, rfl⟩
 #align monoid_hom.submonoid_map_surjective MonoidHom.submonoidMap_surjective
 #align add_monoid_hom.add_submonoid_map_surjective AddMonoidHom.addSubmonoidMap_surjective
 
@@ -2375,10 +2355,7 @@ but is expected to have type
 Case conversion may be inaccurate. Consider using '#align submonoid.equiv_map_of_injective_coe_mul_equiv Submonoid.equivMapOfInjective_coe_mulEquivₓ'. -/
 @[simp, to_additive]
 theorem Submonoid.equivMapOfInjective_coe_mulEquiv (e : M ≃* N) :
-    S.equivMapOfInjective (e : M →* N) (EquivLike.injective e) = e.submonoidMap S :=
-  by
-  ext
-  rfl
+    S.equivMapOfInjective (e : M →* N) (EquivLike.injective e) = e.submonoidMap S := by ext; rfl
 #align submonoid.equiv_map_of_injective_coe_mul_equiv Submonoid.equivMapOfInjective_coe_mulEquiv
 #align add_submonoid.equiv_map_of_injective_coe_add_equiv AddSubmonoid.equivMapOfInjective_coe_addEquiv
 
Diff
@@ -115,10 +115,7 @@ abbrev AddSubmonoid.toSubmonoid' : AddSubmonoid (Additive M) ≃o Submonoid M :=
 #align add_submonoid.to_submonoid' AddSubmonoid.toSubmonoid'
 
 /- warning: submonoid.to_add_submonoid_closure -> Submonoid.toAddSubmonoid_closure is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Set.{u1} M), Eq.{succ u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) (fun (_x : RelIso.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))))) (LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))))))) => (Submonoid.{u1} M _inst_1) -> (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))) (RelIso.hasCoeToFun.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))))) (LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))))))) (Submonoid.toAddSubmonoid.{u1} M _inst_1) (Submonoid.closure.{u1} M _inst_1 S)) (AddSubmonoid.closure.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1) (Set.preimage.{u1, u1} (Additive.{u1} M) M (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (Additive.{u1} M) M) (fun (_x : Equiv.{succ u1, succ u1} (Additive.{u1} M) M) => (Additive.{u1} M) -> M) (Equiv.hasCoeToFun.{succ u1, succ u1} (Additive.{u1} M) M) (Additive.toMul.{u1} M)) S))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Set.{u1} M), Eq.{succ u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) (Submonoid.{u1} M _inst_1) (fun (_x : Submonoid.{u1} M _inst_1) => AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302) (RelIso.instRelHomClassRelIso.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302))) (Submonoid.toAddSubmonoid.{u1} M _inst_1) (Submonoid.closure.{u1} M _inst_1 S)) (AddSubmonoid.closure.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1) (Set.preimage.{u1, u1} (Additive.{u1} M) M (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} (Additive.{u1} M) M) (Additive.{u1} M) (fun (_x : Additive.{u1} M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : Additive.{u1} M) => M) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} (Additive.{u1} M) M) (Additive.toMul.{u1} M)) S))
+<too large>
 Case conversion may be inaccurate. Consider using '#align submonoid.to_add_submonoid_closure Submonoid.toAddSubmonoid_closureₓ'. -/
 theorem Submonoid.toAddSubmonoid_closure (S : Set M) :
     (Submonoid.closure S).toAddSubmonoid = AddSubmonoid.closure (Additive.toMul ⁻¹' S) :=
@@ -128,10 +125,7 @@ theorem Submonoid.toAddSubmonoid_closure (S : Set M) :
 #align submonoid.to_add_submonoid_closure Submonoid.toAddSubmonoid_closure
 
 /- warning: add_submonoid.to_submonoid'_closure -> AddSubmonoid.toSubmonoid'_closure is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Set.{u1} (Additive.{u1} M)), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))))) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))))) (fun (_x : RelIso.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))))) => (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) -> (Submonoid.{u1} M _inst_1)) (RelIso.hasCoeToFun.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))))) (AddSubmonoid.toSubmonoid'.{u1} M _inst_1) (AddSubmonoid.closure.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1) S)) (Submonoid.closure.{u1} M _inst_1 (Set.preimage.{u1, u1} M (Multiplicative.{u1} M) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} M (Multiplicative.{u1} M)) (fun (_x : Equiv.{succ u1, succ u1} M (Multiplicative.{u1} M)) => M -> (Multiplicative.{u1} M)) (Equiv.hasCoeToFun.{succ u1, succ u1} M (Multiplicative.{u1} M)) (Multiplicative.ofAdd.{u1} M)) S))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Set.{u1} (Additive.{u1} M)), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (fun (_x : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => Submonoid.{u1} M _inst_1) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302) (RelIso.instRelHomClassRelIso.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302))) (AddSubmonoid.toSubmonoid'.{u1} M _inst_1) (AddSubmonoid.closure.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1) S)) (Submonoid.closure.{u1} M _inst_1 (Set.preimage.{u1, u1} M (Multiplicative.{u1} M) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} M (Multiplicative.{u1} M)) M (fun (_x : M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : M) => Multiplicative.{u1} M) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} M (Multiplicative.{u1} M)) (Multiplicative.ofAdd.{u1} M)) S))
+<too large>
 Case conversion may be inaccurate. Consider using '#align add_submonoid.to_submonoid'_closure AddSubmonoid.toSubmonoid'_closureₓ'. -/
 theorem AddSubmonoid.toSubmonoid'_closure (S : Set (Additive M)) :
     (AddSubmonoid.closure S).toSubmonoid' = Submonoid.closure (Multiplicative.ofAdd ⁻¹' S) :=
@@ -183,10 +177,7 @@ abbrev Submonoid.toAddSubmonoid' : Submonoid (Multiplicative A) ≃o AddSubmonoi
 #align submonoid.to_add_submonoid' Submonoid.toAddSubmonoid'
 
 /- warning: add_submonoid.to_submonoid_closure -> AddSubmonoid.toSubmonoid_closure is a dubious translation:
-lean 3 declaration is
-  forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A] (S : Set.{u1} A), Eq.{succ u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4)))) (Preorder.toHasLe.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) (fun (_x : RelIso.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4))))) (LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toHasLe.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))))))) => (AddSubmonoid.{u1} A _inst_4) -> (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))) (RelIso.hasCoeToFun.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4))))) (LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toHasLe.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))))))) (AddSubmonoid.toSubmonoid.{u1} A _inst_4) (AddSubmonoid.closure.{u1} A _inst_4 S)) (Submonoid.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4) (Set.preimage.{u1, u1} (Multiplicative.{u1} A) A (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (Multiplicative.{u1} A) A) (fun (_x : Equiv.{succ u1, succ u1} (Multiplicative.{u1} A) A) => (Multiplicative.{u1} A) -> A) (Equiv.hasCoeToFun.{succ u1, succ u1} (Multiplicative.{u1} A) A) (Multiplicative.toAdd.{u1} A)) S))
-but is expected to have type
-  forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A] (S : Set.{u1} A), Eq.{succ u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) (AddSubmonoid.{u1} A _inst_4) (fun (_x : AddSubmonoid.{u1} A _inst_4) => Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302) (RelIso.instRelHomClassRelIso.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302))) (AddSubmonoid.toSubmonoid.{u1} A _inst_4) (AddSubmonoid.closure.{u1} A _inst_4 S)) (Submonoid.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4) (Set.preimage.{u1, u1} (Multiplicative.{u1} A) A (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} (Multiplicative.{u1} A) A) (Multiplicative.{u1} A) (fun (_x : Multiplicative.{u1} A) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : Multiplicative.{u1} A) => A) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} (Multiplicative.{u1} A) A) (Multiplicative.toAdd.{u1} A)) S))
+<too large>
 Case conversion may be inaccurate. Consider using '#align add_submonoid.to_submonoid_closure AddSubmonoid.toSubmonoid_closureₓ'. -/
 theorem AddSubmonoid.toSubmonoid_closure (S : Set A) :
     (AddSubmonoid.closure S).toSubmonoid = Submonoid.closure (Multiplicative.toAdd ⁻¹' S) :=
@@ -197,10 +188,7 @@ theorem AddSubmonoid.toSubmonoid_closure (S : Set A) :
 #align add_submonoid.to_submonoid_closure AddSubmonoid.toSubmonoid_closure
 
 /- warning: submonoid.to_add_submonoid'_closure -> Submonoid.toAddSubmonoid'_closure is a dubious translation:
-lean 3 declaration is
-  forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A] (S : Set.{u1} (Multiplicative.{u1} A)), Eq.{succ u1} (AddSubmonoid.{u1} A _inst_4) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (Preorder.toHasLe.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))))) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4))))) (fun (_x : RelIso.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toHasLe.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) (LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4)))))) => (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) -> (AddSubmonoid.{u1} A _inst_4)) (RelIso.hasCoeToFun.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toHasLe.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) (LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4)))))) (Submonoid.toAddSubmonoid'.{u1} A _inst_4) (Submonoid.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4) S)) (AddSubmonoid.closure.{u1} A _inst_4 (Set.preimage.{u1, u1} A (Additive.{u1} A) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} A (Additive.{u1} A)) (fun (_x : Equiv.{succ u1, succ u1} A (Additive.{u1} A)) => A -> (Additive.{u1} A)) (Equiv.hasCoeToFun.{succ u1, succ u1} A (Additive.{u1} A)) (Additive.ofMul.{u1} A)) S))
-but is expected to have type
-  forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A] (S : Set.{u1} (Multiplicative.{u1} A)), Eq.{succ u1} (AddSubmonoid.{u1} A _inst_4) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (fun (_x : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => AddSubmonoid.{u1} A _inst_4) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302) (RelIso.instRelHomClassRelIso.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302))) (Submonoid.toAddSubmonoid'.{u1} A _inst_4) (Submonoid.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4) S)) (AddSubmonoid.closure.{u1} A _inst_4 (Set.preimage.{u1, u1} A (Additive.{u1} A) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} A (Additive.{u1} A)) A (fun (_x : A) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : A) => Additive.{u1} A) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} A (Additive.{u1} A)) (Additive.ofMul.{u1} A)) S))
+<too large>
 Case conversion may be inaccurate. Consider using '#align submonoid.to_add_submonoid'_closure Submonoid.toAddSubmonoid'_closureₓ'. -/
 theorem Submonoid.toAddSubmonoid'_closure (S : Set (Multiplicative A)) :
     (Submonoid.closure S).toAddSubmonoid' = AddSubmonoid.closure (Additive.ofMul ⁻¹' S) :=
@@ -1328,10 +1316,7 @@ noncomputable def equivMapOfInjective (f : M →* N) (hf : Function.Injective f)
 #align add_submonoid.equiv_map_of_injective AddSubmonoid.equivMapOfInjective
 
 /- warning: submonoid.coe_equiv_map_of_injective_apply -> Submonoid.coe_equivMapOfInjective_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] (S : Submonoid.{u1} M _inst_1) (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2) (hf : Function.Injective.{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)) (x : coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S), Eq.{succ u2} N ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)))))) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MulEquiv.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S))) (fun (_x : MulEquiv.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S))) => (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) -> (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S))) (MulEquiv.hasCoeToFun.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S))) (Submonoid.equivMapOfInjective.{u1, u2} M N _inst_1 _inst_2 S f hf) 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 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S))))) x))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (S : Submonoid.{u2} M _inst_1) (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2) (hf : Function.Injective.{succ u2, succ u1} M N (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 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)), Eq.{succ u1} N (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) _x) (EmbeddingLike.toFunLike.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (EquivLike.toEmbeddingLike.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (MulEquivClass.toEquivLike.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S)) (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S)))))) (Submonoid.equivMapOfInjective.{u2, u1} M N _inst_1 _inst_2 S f hf) 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 (Subtype.val.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Set.{u2} M) (Set.instMembershipSet.{u2} M) x (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) x))
+<too large>
 Case conversion may be inaccurate. Consider using '#align submonoid.coe_equiv_map_of_injective_apply Submonoid.coe_equivMapOfInjective_applyₓ'. -/
 @[simp, to_additive]
 theorem coe_equivMapOfInjective_apply (f : M →* N) (hf : Function.Injective f) (x : S) :
@@ -1799,10 +1784,7 @@ def restrict {N S : Type _} [MulOneClass N] [SetLike S M] [SubmonoidClass S M] (
 -/
 
 /- warning: monoid_hom.restrict_apply -> MonoidHom.restrict_apply is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {N : Type.{u2}} {S : Type.{u3}} [_inst_4 : MulOneClass.{u2} N] [_inst_5 : SetLike.{u3, u1} S M] [_inst_6 : SubmonoidClass.{u3, u1} S M _inst_1 _inst_5] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_4) (s : S) (x : coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s) N (SubmonoidClass.toMulOneClass.{u1, u3} M _inst_1 S _inst_5 _inst_6 s) _inst_4) (fun (_x : MonoidHom.{u1, u2} (coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s) N (SubmonoidClass.toMulOneClass.{u1, u3} M _inst_1 S _inst_5 _inst_6 s) _inst_4) => (coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s) -> N) (MonoidHom.hasCoeToFun.{u1, u2} (coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s) N (SubmonoidClass.toMulOneClass.{u1, u3} M _inst_1 S _inst_5 _inst_6 s) _inst_4) (MonoidHom.restrict.{u1, u2, u3} M _inst_1 N S _inst_4 _inst_5 _inst_6 f s) x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_4) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_4) f ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s) M (coeBase.{succ u1, succ u1} (coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u3} M S (SetLike.hasMem.{u3, u1} S M _inst_5) x s))))) x))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {N : Type.{u3}} {S : Type.{u2}} [_inst_4 : MulOneClass.{u3} N] [_inst_5 : SetLike.{u2, u1} S M] [_inst_6 : SubmonoidClass.{u2, u1} S M _inst_1 _inst_5] (f : MonoidHom.{u1, u3} M N _inst_1 _inst_4) (s : S) (x : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)), Eq.{succ u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) => N) x) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (MonoidHom.{u1, u3} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) (fun (_x : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) => N) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} (MonoidHom.{u1, u3} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (MulOneClass.toMul.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s)) (MulOneClass.toMul.{u3} N _inst_4) (MonoidHomClass.toMulHomClass.{max u1 u3, u1, u3} (MonoidHom.{u1, u3} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4 (MonoidHom.monoidHomClass.{u1, u3} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4))) (MonoidHom.restrict.{u1, u3, u2} M _inst_1 N S _inst_4 _inst_5 _inst_6 f s) x) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (MonoidHom.{u1, u3} M N _inst_1 _inst_4) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} (MonoidHom.{u1, u3} M N _inst_1 _inst_4) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u3} N _inst_4) (MonoidHomClass.toMulHomClass.{max u1 u3, u1, u3} (MonoidHom.{u1, u3} M N _inst_1 _inst_4) M N _inst_1 _inst_4 (MonoidHom.monoidHomClass.{u1, u3} M N _inst_1 _inst_4))) f (Subtype.val.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) x (SetLike.coe.{u2, u1} S M _inst_5 s)) x))
+<too large>
 Case conversion may be inaccurate. Consider using '#align monoid_hom.restrict_apply MonoidHom.restrict_applyₓ'. -/
 @[simp, to_additive]
 theorem restrict_apply {N S : Type _} [MulOneClass N] [SetLike S M] [SubmonoidClass S M]
@@ -1855,10 +1837,7 @@ def mrangeRestrict {N} [MulOneClass N] (f : M →* N) : M →* f.mrange :=
 #align add_monoid_hom.mrange_restrict AddMonoidHom.mrangeRestrict
 
 /- warning: monoid_hom.coe_mrange_restrict -> MonoidHom.coe_mrangeRestrict is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {N : Type.{u2}} [_inst_4 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_4) (x : M), Eq.{succ u2} N ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_4) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_4) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_4) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_4) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)))))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_4) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (fun (_x : MonoidHom.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_4) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) => M -> (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_4) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (MonoidHom.hasCoeToFun.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_4) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (MonoidHom.mrangeRestrict.{u1, u2} M _inst_1 N _inst_4 f) x)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_4) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_4) f x)
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {N : Type.{u2}} [_inst_4 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_4) (x : M), Eq.{succ u2} N (Subtype.val.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Set.{u2} N) (Set.instMembershipSet.{u2} N) x (SetLike.coe.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4) (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) (MonoidHom.monoidHomClass.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))))) (MonoidHom.mrangeRestrict.{u1, u2} M _inst_1 N _inst_4 f) x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_4) 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 _inst_1 _inst_4) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_4) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_4) M N _inst_1 _inst_4 (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4))) f x)
+<too large>
 Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_mrange_restrict MonoidHom.coe_mrangeRestrictₓ'. -/
 @[simp, to_additive]
 theorem coe_mrangeRestrict {N} [MulOneClass N] (f : M →* N) (x : M) :
@@ -2087,10 +2066,7 @@ def submonoidMap (f : M →* N) (M' : Submonoid M) : M' →* M'.map f
 #align add_monoid_hom.add_submonoid_map AddMonoidHom.addSubmonoidMap
 
 /- warning: monoid_hom.submonoid_map_surjective -> MonoidHom.submonoidMap_surjective 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) (M' : Submonoid.{u1} M _inst_1), Function.Surjective.{succ u1, succ u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) M') (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M')) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) M') (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M')) (Submonoid.toMulOneClass.{u1} M _inst_1 M') (Submonoid.toMulOneClass.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M'))) (fun (_x : MonoidHom.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) M') (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M')) (Submonoid.toMulOneClass.{u1} M _inst_1 M') (Submonoid.toMulOneClass.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M'))) => (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) M') -> (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M'))) (MonoidHom.hasCoeToFun.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) M') (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M')) (Submonoid.toMulOneClass.{u1} M _inst_1 M') (Submonoid.toMulOneClass.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M'))) (MonoidHom.submonoidMap.{u1, u2} M N _inst_1 _inst_2 f M'))
-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) (M' : Submonoid.{u2} M _inst_1), Function.Surjective.{succ u2, succ u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (MulOneClass.toMul.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Submonoid.toMulOneClass.{u2} M _inst_1 M')) (MulOneClass.toMul.{u1} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M')) (MonoidHom.monoidHomClass.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))))) (MonoidHom.submonoidMap.{u2, u1} M N _inst_1 _inst_2 f M'))
+<too large>
 Case conversion may be inaccurate. Consider using '#align monoid_hom.submonoid_map_surjective MonoidHom.submonoidMap_surjectiveₓ'. -/
 @[to_additive]
 theorem submonoidMap_surjective (f : M →* N) (M' : Submonoid M) :
@@ -2370,10 +2346,7 @@ def submonoidMap (e : M ≃* N) (S : Submonoid M) : S ≃* S.map e.toMonoidHom :
 #align add_equiv.add_submonoid_map AddEquiv.addSubmonoidMap
 
 /- warning: mul_equiv.coe_submonoid_map_apply -> MulEquiv.coe_submonoidMap_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] (e : MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (S : Submonoid.{u1} M _inst_1) (g : coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S), Eq.{succ u2} N ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)))))) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MulEquiv.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S))) (fun (_x : MulEquiv.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S))) => (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) -> (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S))) (MulEquiv.hasCoeToFun.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S))) (MulEquiv.submonoidMap.{u1, u2} M N _inst_1 _inst_2 e S) g)) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (fun (_x : MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) => M -> N) (MulEquiv.hasCoeToFun.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) e ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S))))) g))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (e : MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) (S : Submonoid.{u2} M _inst_1) (g : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)), Eq.{succ u1} N (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) _x) (EmbeddingLike.toFunLike.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (EquivLike.toEmbeddingLike.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (MulEquivClass.toEquivLike.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)))))) (MulEquiv.submonoidMap.{u2, u1} M N _inst_1 _inst_2 e S) g)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : M) => N) _x) (EmbeddingLike.toFunLike.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N (EquivLike.toEmbeddingLike.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N (MulEquivClass.toEquivLike.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))))) e (Subtype.val.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Set.{u2} M) (Set.instMembershipSet.{u2} M) x (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) g))
+<too large>
 Case conversion may be inaccurate. Consider using '#align mul_equiv.coe_submonoid_map_apply MulEquiv.coe_submonoidMap_applyₓ'. -/
 @[simp, to_additive]
 theorem coe_submonoidMap_apply (e : M ≃* N) (S : Submonoid M) (g : S) :
@@ -2383,10 +2356,7 @@ theorem coe_submonoidMap_apply (e : M ≃* N) (S : Submonoid M) (g : S) :
 #align add_equiv.coe_add_submonoid_map_apply AddEquiv.coe_addSubmonoidMap_apply
 
 /- warning: mul_equiv.submonoid_map_symm_apply -> MulEquiv.submonoidMap_symm_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] (e : MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (S : Submonoid.{u1} M _inst_1) (g : coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)), Eq.{succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S)) (fun (_x : MulEquiv.{u2, u1} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S)) => (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) -> (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S)) (MulEquiv.hasCoeToFun.{u2, u1} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S)) (MulEquiv.symm.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (MulEquiv.submonoidMap.{u1, u2} M N _inst_1 _inst_2 e S)) g) (Subtype.mk.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (fun (_x : MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) => N -> M) (MulEquiv.hasCoeToFun.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (MulEquiv.symm.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g)) (Iff.mp (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (fun (_x : MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) => N -> M) (MulEquiv.hasCoeToFun.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (MulEquiv.symm.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S)) (Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (fun (_x : MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) => N -> M) (MulEquiv.hasCoeToFun.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (MulEquiv.symm.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g)) S) (SetLike.mem_coe.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1) S (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (fun (_x : MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) => N -> M) (MulEquiv.hasCoeToFun.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (MulEquiv.symm.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g))) (Iff.mp (Membership.Mem.{u2, u2} N (Set.{u2} N) (Set.hasMem.{u2} N) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g) (Set.image.{u1, u2} M N (coeFn.{max 1 (max (succ u1) (succ u2)) (succ u2) (succ u1), max (succ u1) (succ u2)} (Equiv.{succ u1, succ u2} M N) (fun (_x : Equiv.{succ u1, succ u2} M N) => M -> N) (Equiv.hasCoeToFun.{succ u1, succ u2} M N) (MulEquiv.toEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S))) (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} N M) (fun (_x : Equiv.{succ u2, succ u1} N M) => N -> M) (Equiv.hasCoeToFun.{succ u2, succ u1} N M) (Equiv.symm.{succ u1, succ u2} M N (MulEquiv.toEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e)) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S)) (Set.mem_image_equiv.{u1, u2} M N ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S) (MulEquiv.toEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g)) (Subtype.property.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) g))))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (e : MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) (S : Submonoid.{u2} M _inst_1) (g : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))), Eq.{succ u2} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) => Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) g) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (fun (_x : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) => Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (EquivLike.toEmbeddingLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (MulEquivClass.toEquivLike.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S))))) (MulEquiv.symm.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (MulEquiv.submonoidMap.{u2, u1} M N _inst_1 _inst_2 e S)) g) (Subtype.mk.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : N) => M) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (EquivLike.toEmbeddingLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulEquivClass.toEquivLike.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (Iff.mp (Membership.mem.{u2, u2} M (Set.{u2} M) (Set.instMembershipSet.{u2} M) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : N) => M) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (EquivLike.toEmbeddingLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulEquivClass.toEquivLike.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) (Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : N) => M) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (EquivLike.toEmbeddingLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulEquivClass.toEquivLike.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) S) (SetLike.mem_coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : N) => M) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (EquivLike.toEmbeddingLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulEquivClass.toEquivLike.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g))) (Iff.mp (Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g) (Set.image.{u2, u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (Equiv.{succ u2, succ u1} M N) M (fun (_x : M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : M) => N) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} M N) (MulEquiv.toEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e)) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S))) (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : N) => M) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (Set.{u2} M) (Set.instMembershipSet.{u2} M) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (Equiv.{succ u1, succ u2} N M) N (fun (_x : N) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : N) => M) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u2} N M) (Equiv.symm.{succ u2, succ u1} M N (MulEquiv.toEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e)) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) (Set.mem_image_equiv.{u1, u2} M N (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S) (MulEquiv.toEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (Subtype.property.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S)) g))))
+<too large>
 Case conversion may be inaccurate. Consider using '#align mul_equiv.submonoid_map_symm_apply MulEquiv.submonoidMap_symm_applyₓ'. -/
 @[simp, to_additive AddEquiv.add_submonoid_map_symm_apply]
 theorem submonoidMap_symm_apply (e : M ≃* N) (S : Submonoid M) (g : S.map (e : M →* N)) :
Diff
@@ -118,7 +118,7 @@ abbrev AddSubmonoid.toSubmonoid' : AddSubmonoid (Additive M) ≃o Submonoid M :=
 lean 3 declaration is
   forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Set.{u1} M), Eq.{succ u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) (fun (_x : RelIso.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))))) (LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))))))) => (Submonoid.{u1} M _inst_1) -> (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))) (RelIso.hasCoeToFun.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))))) (LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))))))) (Submonoid.toAddSubmonoid.{u1} M _inst_1) (Submonoid.closure.{u1} M _inst_1 S)) (AddSubmonoid.closure.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1) (Set.preimage.{u1, u1} (Additive.{u1} M) M (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (Additive.{u1} M) M) (fun (_x : Equiv.{succ u1, succ u1} (Additive.{u1} M) M) => (Additive.{u1} M) -> M) (Equiv.hasCoeToFun.{succ u1, succ u1} (Additive.{u1} M) M) (Additive.toMul.{u1} M)) S))
 but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Set.{u1} M), Eq.{succ u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (Submonoid.{u1} M _inst_1) (fun (_x : Submonoid.{u1} M _inst_1) => AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.instRelHomClassRelIso.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298))) (Submonoid.toAddSubmonoid.{u1} M _inst_1) (Submonoid.closure.{u1} M _inst_1 S)) (AddSubmonoid.closure.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1) (Set.preimage.{u1, u1} (Additive.{u1} M) M (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} (Additive.{u1} M) M) (Additive.{u1} M) (fun (_x : Additive.{u1} M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Additive.{u1} M) => M) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} (Additive.{u1} M) M) (Additive.toMul.{u1} M)) S))
+  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Set.{u1} M), Eq.{succ u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) (Submonoid.{u1} M _inst_1) (fun (_x : Submonoid.{u1} M _inst_1) => AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302) (RelIso.instRelHomClassRelIso.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302))) (Submonoid.toAddSubmonoid.{u1} M _inst_1) (Submonoid.closure.{u1} M _inst_1 S)) (AddSubmonoid.closure.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1) (Set.preimage.{u1, u1} (Additive.{u1} M) M (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} (Additive.{u1} M) M) (Additive.{u1} M) (fun (_x : Additive.{u1} M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : Additive.{u1} M) => M) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} (Additive.{u1} M) M) (Additive.toMul.{u1} M)) S))
 Case conversion may be inaccurate. Consider using '#align submonoid.to_add_submonoid_closure Submonoid.toAddSubmonoid_closureₓ'. -/
 theorem Submonoid.toAddSubmonoid_closure (S : Set M) :
     (Submonoid.closure S).toAddSubmonoid = AddSubmonoid.closure (Additive.toMul ⁻¹' S) :=
@@ -131,7 +131,7 @@ theorem Submonoid.toAddSubmonoid_closure (S : Set M) :
 lean 3 declaration is
   forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Set.{u1} (Additive.{u1} M)), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))))) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))))) (fun (_x : RelIso.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))))) => (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) -> (Submonoid.{u1} M _inst_1)) (RelIso.hasCoeToFun.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))))) (AddSubmonoid.toSubmonoid'.{u1} M _inst_1) (AddSubmonoid.closure.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1) S)) (Submonoid.closure.{u1} M _inst_1 (Set.preimage.{u1, u1} M (Multiplicative.{u1} M) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} M (Multiplicative.{u1} M)) (fun (_x : Equiv.{succ u1, succ u1} M (Multiplicative.{u1} M)) => M -> (Multiplicative.{u1} M)) (Equiv.hasCoeToFun.{succ u1, succ u1} M (Multiplicative.{u1} M)) (Multiplicative.ofAdd.{u1} M)) S))
 but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Set.{u1} (Additive.{u1} M)), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (fun (_x : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => Submonoid.{u1} M _inst_1) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.instRelHomClassRelIso.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298))) (AddSubmonoid.toSubmonoid'.{u1} M _inst_1) (AddSubmonoid.closure.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1) S)) (Submonoid.closure.{u1} M _inst_1 (Set.preimage.{u1, u1} M (Multiplicative.{u1} M) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} M (Multiplicative.{u1} M)) M (fun (_x : M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : M) => Multiplicative.{u1} M) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} M (Multiplicative.{u1} M)) (Multiplicative.ofAdd.{u1} M)) S))
+  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Set.{u1} (Additive.{u1} M)), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (fun (_x : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => Submonoid.{u1} M _inst_1) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302) (RelIso.instRelHomClassRelIso.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302))) (AddSubmonoid.toSubmonoid'.{u1} M _inst_1) (AddSubmonoid.closure.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1) S)) (Submonoid.closure.{u1} M _inst_1 (Set.preimage.{u1, u1} M (Multiplicative.{u1} M) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} M (Multiplicative.{u1} M)) M (fun (_x : M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : M) => Multiplicative.{u1} M) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} M (Multiplicative.{u1} M)) (Multiplicative.ofAdd.{u1} M)) S))
 Case conversion may be inaccurate. Consider using '#align add_submonoid.to_submonoid'_closure AddSubmonoid.toSubmonoid'_closureₓ'. -/
 theorem AddSubmonoid.toSubmonoid'_closure (S : Set (Additive M)) :
     (AddSubmonoid.closure S).toSubmonoid' = Submonoid.closure (Multiplicative.ofAdd ⁻¹' S) :=
@@ -186,7 +186,7 @@ abbrev Submonoid.toAddSubmonoid' : Submonoid (Multiplicative A) ≃o AddSubmonoi
 lean 3 declaration is
   forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A] (S : Set.{u1} A), Eq.{succ u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4)))) (Preorder.toHasLe.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) (fun (_x : RelIso.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4))))) (LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toHasLe.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))))))) => (AddSubmonoid.{u1} A _inst_4) -> (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))) (RelIso.hasCoeToFun.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4))))) (LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toHasLe.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))))))) (AddSubmonoid.toSubmonoid.{u1} A _inst_4) (AddSubmonoid.closure.{u1} A _inst_4 S)) (Submonoid.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4) (Set.preimage.{u1, u1} (Multiplicative.{u1} A) A (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (Multiplicative.{u1} A) A) (fun (_x : Equiv.{succ u1, succ u1} (Multiplicative.{u1} A) A) => (Multiplicative.{u1} A) -> A) (Equiv.hasCoeToFun.{succ u1, succ u1} (Multiplicative.{u1} A) A) (Multiplicative.toAdd.{u1} A)) S))
 but is expected to have type
-  forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A] (S : Set.{u1} A), Eq.{succ u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (AddSubmonoid.{u1} A _inst_4) (fun (_x : AddSubmonoid.{u1} A _inst_4) => Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.instRelHomClassRelIso.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298))) (AddSubmonoid.toSubmonoid.{u1} A _inst_4) (AddSubmonoid.closure.{u1} A _inst_4 S)) (Submonoid.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4) (Set.preimage.{u1, u1} (Multiplicative.{u1} A) A (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} (Multiplicative.{u1} A) A) (Multiplicative.{u1} A) (fun (_x : Multiplicative.{u1} A) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Multiplicative.{u1} A) => A) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} (Multiplicative.{u1} A) A) (Multiplicative.toAdd.{u1} A)) S))
+  forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A] (S : Set.{u1} A), Eq.{succ u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) (AddSubmonoid.{u1} A _inst_4) (fun (_x : AddSubmonoid.{u1} A _inst_4) => Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302) (RelIso.instRelHomClassRelIso.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302))) (AddSubmonoid.toSubmonoid.{u1} A _inst_4) (AddSubmonoid.closure.{u1} A _inst_4 S)) (Submonoid.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4) (Set.preimage.{u1, u1} (Multiplicative.{u1} A) A (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} (Multiplicative.{u1} A) A) (Multiplicative.{u1} A) (fun (_x : Multiplicative.{u1} A) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : Multiplicative.{u1} A) => A) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} (Multiplicative.{u1} A) A) (Multiplicative.toAdd.{u1} A)) S))
 Case conversion may be inaccurate. Consider using '#align add_submonoid.to_submonoid_closure AddSubmonoid.toSubmonoid_closureₓ'. -/
 theorem AddSubmonoid.toSubmonoid_closure (S : Set A) :
     (AddSubmonoid.closure S).toSubmonoid = Submonoid.closure (Multiplicative.toAdd ⁻¹' S) :=
@@ -200,7 +200,7 @@ theorem AddSubmonoid.toSubmonoid_closure (S : Set A) :
 lean 3 declaration is
   forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A] (S : Set.{u1} (Multiplicative.{u1} A)), Eq.{succ u1} (AddSubmonoid.{u1} A _inst_4) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (Preorder.toHasLe.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))))) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4))))) (fun (_x : RelIso.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toHasLe.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) (LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4)))))) => (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) -> (AddSubmonoid.{u1} A _inst_4)) (RelIso.hasCoeToFun.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toHasLe.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) (LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4)))))) (Submonoid.toAddSubmonoid'.{u1} A _inst_4) (Submonoid.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4) S)) (AddSubmonoid.closure.{u1} A _inst_4 (Set.preimage.{u1, u1} A (Additive.{u1} A) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} A (Additive.{u1} A)) (fun (_x : Equiv.{succ u1, succ u1} A (Additive.{u1} A)) => A -> (Additive.{u1} A)) (Equiv.hasCoeToFun.{succ u1, succ u1} A (Additive.{u1} A)) (Additive.ofMul.{u1} A)) S))
 but is expected to have type
-  forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A] (S : Set.{u1} (Multiplicative.{u1} A)), Eq.{succ u1} (AddSubmonoid.{u1} A _inst_4) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (fun (_x : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => AddSubmonoid.{u1} A _inst_4) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.instRelHomClassRelIso.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298))) (Submonoid.toAddSubmonoid'.{u1} A _inst_4) (Submonoid.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4) S)) (AddSubmonoid.closure.{u1} A _inst_4 (Set.preimage.{u1, u1} A (Additive.{u1} A) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} A (Additive.{u1} A)) A (fun (_x : A) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : A) => Additive.{u1} A) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} A (Additive.{u1} A)) (Additive.ofMul.{u1} A)) S))
+  forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A] (S : Set.{u1} (Multiplicative.{u1} A)), Eq.{succ u1} (AddSubmonoid.{u1} A _inst_4) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (fun (_x : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => AddSubmonoid.{u1} A _inst_4) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302) (RelIso.instRelHomClassRelIso.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302))) (Submonoid.toAddSubmonoid'.{u1} A _inst_4) (Submonoid.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4) S)) (AddSubmonoid.closure.{u1} A _inst_4 (Set.preimage.{u1, u1} A (Additive.{u1} A) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} A (Additive.{u1} A)) A (fun (_x : A) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : A) => Additive.{u1} A) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} A (Additive.{u1} A)) (Additive.ofMul.{u1} A)) S))
 Case conversion may be inaccurate. Consider using '#align submonoid.to_add_submonoid'_closure Submonoid.toAddSubmonoid'_closureₓ'. -/
 theorem Submonoid.toAddSubmonoid'_closure (S : Set (Multiplicative A)) :
     (Submonoid.closure S).toAddSubmonoid' = AddSubmonoid.closure (Additive.ofMul ⁻¹' S) :=
@@ -242,7 +242,7 @@ def comap (f : F) (S : Submonoid N) : Submonoid M
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (S : Submonoid.{u2} N _inst_2) (f : F), Eq.{succ u1} (Set.{u1} M) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)) (Set.preimage.{u1, 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) (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 mc))) f) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Submonoid.{u2} N _inst_2) (Set.{u2} N) (HasLiftT.mk.{succ u2, succ u2} (Submonoid.{u2} N _inst_2) (Set.{u2} N) (CoeTCₓ.coe.{succ u2, succ u2} (Submonoid.{u2} N _inst_2) (Set.{u2} N) (SetLike.Set.hasCoeT.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) S))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] (S : Submonoid.{u3} N _inst_2) (f : F), Eq.{succ u2} (Set.{u2} M) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S)) (Set.preimage.{u2, u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f) (SetLike.coe.{u3, u3} (Submonoid.{u3} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u3} N _inst_2) S))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] (S : Submonoid.{u3} N _inst_2) (f : F), Eq.{succ u2} (Set.{u2} M) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S)) (Set.preimage.{u2, u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f) (SetLike.coe.{u3, u3} (Submonoid.{u3} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u3} N _inst_2) S))
 Case conversion may be inaccurate. Consider using '#align submonoid.coe_comap Submonoid.coe_comapₓ'. -/
 @[simp, to_additive]
 theorem coe_comap (S : Submonoid N) (f : F) : (S.comap f : Set M) = f ⁻¹' S :=
@@ -254,7 +254,7 @@ theorem coe_comap (S : Submonoid N) (f : F) : (S.comap f : Set M) = f ⁻¹' S :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {S : Submonoid.{u2} N _inst_2} {f : F} {x : M}, Iff (Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)) (Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{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 mc))) f x) S)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {S : Submonoid.{u3} N _inst_2} {f : F} {x : M}, Iff (Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S)) (Membership.mem.{u3, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (Submonoid.{u3} N _inst_2) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u3} N _inst_2)) (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f x) S)
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {S : Submonoid.{u3} N _inst_2} {f : F} {x : M}, Iff (Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S)) (Membership.mem.{u3, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (Submonoid.{u3} N _inst_2) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u3} N _inst_2)) (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f x) S)
 Case conversion may be inaccurate. Consider using '#align submonoid.mem_comap Submonoid.mem_comapₓ'. -/
 @[simp, to_additive]
 theorem mem_comap {S : Submonoid N} {f : F} {x : M} : x ∈ S.comap f ↔ f x ∈ S :=
@@ -301,7 +301,7 @@ def map (f : F) (S : Submonoid M) : Submonoid N
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F) (S : Submonoid.{u1} M _inst_1), Eq.{succ u2} (Set.{u2} N) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Submonoid.{u2} N _inst_2) (Set.{u2} N) (HasLiftT.mk.{succ u2, succ u2} (Submonoid.{u2} N _inst_2) (Set.{u2} N) (CoeTCₓ.coe.{succ u2, succ u2} (Submonoid.{u2} N _inst_2) (Set.{u2} N) (SetLike.Set.hasCoeT.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)) (Set.image.{u1, 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) (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 mc))) f) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) (S : Submonoid.{u3} M _inst_1), Eq.{succ u2} (Set.{u2} N) (SetLike.coe.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)) (Set.image.{u3, u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f) (SetLike.coe.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1) S))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) (S : Submonoid.{u3} M _inst_1), Eq.{succ u2} (Set.{u2} N) (SetLike.coe.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)) (Set.image.{u3, u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f) (SetLike.coe.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1) S))
 Case conversion may be inaccurate. Consider using '#align submonoid.coe_map Submonoid.coe_mapₓ'. -/
 @[simp, to_additive]
 theorem coe_map (f : F) (S : Submonoid M) : (S.map f : Set N) = f '' S :=
@@ -313,7 +313,7 @@ theorem coe_map (f : F) (S : Submonoid M) : (S.map f : Set N) = f '' S :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F} {S : Submonoid.{u1} M _inst_1} {y : N}, Iff (Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) y (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)) (Exists.{succ u1} M (fun (x : M) => Exists.{0} (Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S) (fun (H : Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S) => 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 (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 mc))) f x) y)))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F} {S : Submonoid.{u3} M _inst_1} {y : N}, Iff (Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) y (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)) (Exists.{succ u3} M (fun (x : M) => And (Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x S) (Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (MulHomClass.toFunLike.{u1, u3, u2} F M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f x) y)))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F} {S : Submonoid.{u3} M _inst_1} {y : N}, Iff (Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) y (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)) (Exists.{succ u3} M (fun (x : M) => And (Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x S) (Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (MulHomClass.toFunLike.{u1, u3, u2} F M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f x) y)))
 Case conversion may be inaccurate. Consider using '#align submonoid.mem_map Submonoid.mem_mapₓ'. -/
 @[simp, to_additive]
 theorem mem_map {f : F} {S : Submonoid M} {y : N} : y ∈ S.map f ↔ ∃ x ∈ S, f x = y :=
@@ -325,7 +325,7 @@ theorem mem_map {f : F} {S : Submonoid M} {y : N} : y ∈ S.map f ↔ ∃ x ∈
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F) {S : Submonoid.{u1} M _inst_1} {x : M}, (Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S) -> (Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{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 mc))) f x) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) {S : Submonoid.{u3} M _inst_1} {x : M}, (Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x S) -> (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f x) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) {S : Submonoid.{u3} M _inst_1} {x : M}, (Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x S) -> (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f x) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S))
 Case conversion may be inaccurate. Consider using '#align submonoid.mem_map_of_mem Submonoid.mem_map_of_memₓ'. -/
 @[to_additive]
 theorem mem_map_of_mem (f : F) {S : Submonoid M} {x : M} (hx : x ∈ S) : f x ∈ S.map f :=
@@ -337,7 +337,7 @@ theorem mem_map_of_mem (f : F) {S : Submonoid M} {x : M} (hx : x ∈ S) : f x 
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F) (S : Submonoid.{u1} M _inst_1) (x : coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S), Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{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 mc))) f ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S))))) x)) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) (S : Submonoid.{u3} M _inst_1) (x : Subtype.{succ u3} M (fun (x : M) => Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x S)), Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (Subtype.val.{succ u3} M (fun (x : M) => Membership.mem.{u3, u3} M (Set.{u3} M) (Set.instMembershipSet.{u3} M) x (SetLike.coe.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1) S)) x)) (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f (Subtype.val.{succ u3} M (fun (x : M) => Membership.mem.{u3, u3} M (Set.{u3} M) (Set.instMembershipSet.{u3} M) x (SetLike.coe.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1) S)) x)) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) (S : Submonoid.{u3} M _inst_1) (x : Subtype.{succ u3} M (fun (x : M) => Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x S)), Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (Subtype.val.{succ u3} M (fun (x : M) => Membership.mem.{u3, u3} M (Set.{u3} M) (Set.instMembershipSet.{u3} M) x (SetLike.coe.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1) S)) x)) (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f (Subtype.val.{succ u3} M (fun (x : M) => Membership.mem.{u3, u3} M (Set.{u3} M) (Set.instMembershipSet.{u3} M) x (SetLike.coe.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1) S)) x)) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)
 Case conversion may be inaccurate. Consider using '#align submonoid.apply_coe_mem_map Submonoid.apply_coe_mem_mapₓ'. -/
 @[to_additive]
 theorem apply_coe_mem_map (f : F) (S : Submonoid M) (x : S) : f x ∈ S.map f :=
@@ -365,7 +365,7 @@ include mc
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (forall {S : Submonoid.{u1} M _inst_1} {x : M}, Iff (Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{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 mc))) f x) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)) (Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall {S : Submonoid.{u3} M _inst_1} {x : M}, Iff (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f x) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)) (Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x S))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall {S : Submonoid.{u3} M _inst_1} {x : M}, Iff (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f x) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)) (Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x S))
 Case conversion may be inaccurate. Consider using '#align submonoid.mem_map_iff_mem Submonoid.mem_map_iff_memₓ'. -/
 @[to_additive]
 theorem mem_map_iff_mem {f : F} (hf : Function.Injective f) {S : Submonoid M} {x : M} :
@@ -587,7 +587,7 @@ include hf
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (GaloisCoinsertion.{u1, u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u1, succ u2} M N (FunLike.coe.{succ u3, succ u1, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 mc)) f)) -> (GaloisCoinsertion.{u1, u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u1, succ u2} M N (FunLike.coe.{succ u3, succ u1, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 mc)) f)) -> (GaloisCoinsertion.{u1, u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
 Case conversion may be inaccurate. Consider using '#align submonoid.gci_map_comap Submonoid.gciMapComapₓ'. -/
 /-- `map f` and `comap f` form a `galois_coinsertion` when `f` is injective. -/
 @[to_additive " `map f` and `comap f` form a `galois_coinsertion` when `f` is injective. "]
@@ -600,7 +600,7 @@ def gciMapComap : GaloisCoinsertion (map f) (comap f) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (forall (S : Submonoid.{u1} M _inst_1), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)) S)
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} M _inst_1), Eq.{succ u3} (Submonoid.{u3} M _inst_1) (Submonoid.comap.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)) S)
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} M _inst_1), Eq.{succ u3} (Submonoid.{u3} M _inst_1) (Submonoid.comap.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)) S)
 Case conversion may be inaccurate. Consider using '#align submonoid.comap_map_eq_of_injective Submonoid.comap_map_eq_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_map_eq_of_injective (S : Submonoid M) : (S.map f).comap f = S :=
@@ -612,7 +612,7 @@ theorem comap_map_eq_of_injective (S : Submonoid M) : (S.map f).comap f = S :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (Function.Surjective.{succ u2, succ u1} (Submonoid.{u2} N _inst_2) (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (Function.Surjective.{succ u3, succ u2} (Submonoid.{u3} N _inst_2) (Submonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (Function.Surjective.{succ u3, succ u2} (Submonoid.{u3} N _inst_2) (Submonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f))
 Case conversion may be inaccurate. Consider using '#align submonoid.comap_surjective_of_injective Submonoid.comap_surjective_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_surjective_of_injective : Function.Surjective (comap f) :=
@@ -624,7 +624,7 @@ theorem comap_surjective_of_injective : Function.Surjective (comap f) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (Function.Injective.{succ u1, succ u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (Function.Injective.{succ u3, succ u2} (Submonoid.{u3} M _inst_1) (Submonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (Function.Injective.{succ u3, succ u2} (Submonoid.{u3} M _inst_1) (Submonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f))
 Case conversion may be inaccurate. Consider using '#align submonoid.map_injective_of_injective Submonoid.map_injective_of_injectiveₓ'. -/
 @[to_additive]
 theorem map_injective_of_injective : Function.Injective (map f) :=
@@ -636,7 +636,7 @@ theorem map_injective_of_injective : Function.Injective (map f) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (forall (S : Submonoid.{u1} M _inst_1) (T : Submonoid.{u1} M _inst_1), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Inf.inf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasInf.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))) (Inf.inf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasInf.{u1} M _inst_1) S T))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} M _inst_1) (T : Submonoid.{u3} M _inst_1), Eq.{succ u3} (Submonoid.{u3} M _inst_1) (Submonoid.comap.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Inf.inf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instInfSubmonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f T))) (Inf.inf.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instInfSubmonoid.{u3} M _inst_1) S T))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} M _inst_1) (T : Submonoid.{u3} M _inst_1), Eq.{succ u3} (Submonoid.{u3} M _inst_1) (Submonoid.comap.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Inf.inf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instInfSubmonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f T))) (Inf.inf.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instInfSubmonoid.{u3} M _inst_1) S T))
 Case conversion may be inaccurate. Consider using '#align submonoid.comap_inf_map_of_injective Submonoid.comap_inf_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_inf_map_of_injective (S T : Submonoid M) : (S.map f ⊓ T.map f).comap f = S ⊓ T :=
@@ -648,7 +648,7 @@ theorem comap_inf_map_of_injective (S T : Submonoid M) : (S.map f ⊓ T.map f).c
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {ι : Type.{u4}} {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) (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 mc))) f)) -> (forall (S : ι -> (Submonoid.{u1} M _inst_1)), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (iInf.{u2, succ u4} (Submonoid.{u2} N _inst_2) (Submonoid.hasInf.{u2} N _inst_2) ι (fun (i : ι) => Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (S i)))) (iInf.{u1, succ u4} (Submonoid.{u1} M _inst_1) (Submonoid.hasInf.{u1} M _inst_1) ι S))
 but is expected to have type
-  forall {M : Type.{u4}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u4} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u4, u3} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Injective.{succ u4, succ u3} M N (FunLike.coe.{succ u2, succ u4, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u2, u4, u3} F M N (MulOneClass.toMul.{u4} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u4, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} M _inst_1)), Eq.{succ u4} (Submonoid.{u4} M _inst_1) (Submonoid.comap.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (iInf.{u3, succ u1} (Submonoid.{u3} N _inst_2) (Submonoid.instInfSetSubmonoid.{u3} N _inst_2) ι (fun (i : ι) => Submonoid.map.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (S i)))) (iInf.{u4, succ u1} (Submonoid.{u4} M _inst_1) (Submonoid.instInfSetSubmonoid.{u4} M _inst_1) ι S))
+  forall {M : Type.{u4}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u4} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u4, u3} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Injective.{succ u4, succ u3} M N (FunLike.coe.{succ u2, succ u4, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u2, u4, u3} F M N (MulOneClass.toMul.{u4} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u4, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} M _inst_1)), Eq.{succ u4} (Submonoid.{u4} M _inst_1) (Submonoid.comap.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (iInf.{u3, succ u1} (Submonoid.{u3} N _inst_2) (Submonoid.instInfSetSubmonoid.{u3} N _inst_2) ι (fun (i : ι) => Submonoid.map.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (S i)))) (iInf.{u4, succ u1} (Submonoid.{u4} M _inst_1) (Submonoid.instInfSetSubmonoid.{u4} M _inst_1) ι S))
 Case conversion may be inaccurate. Consider using '#align submonoid.comap_infi_map_of_injective Submonoid.comap_iInf_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_iInf_map_of_injective (S : ι → Submonoid M) : (⨅ i, (S i).map f).comap f = iInf S :=
@@ -660,7 +660,7 @@ theorem comap_iInf_map_of_injective (S : ι → Submonoid M) : (⨅ i, (S i).map
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (forall (S : Submonoid.{u1} M _inst_1) (T : Submonoid.{u1} M _inst_1), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Sup.sup.{u2} (Submonoid.{u2} N _inst_2) (SemilatticeSup.toHasSup.{u2} (Submonoid.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.completeLattice.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))) (Sup.sup.{u1} (Submonoid.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Submonoid.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.completeLattice.{u1} M _inst_1)))) S T))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} M _inst_1) (T : Submonoid.{u3} M _inst_1), Eq.{succ u3} (Submonoid.{u3} M _inst_1) (Submonoid.comap.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Sup.sup.{u2} (Submonoid.{u2} N _inst_2) (SemilatticeSup.toSup.{u2} (Submonoid.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f T))) (Sup.sup.{u3} (Submonoid.{u3} M _inst_1) (SemilatticeSup.toSup.{u3} (Submonoid.{u3} M _inst_1) (Lattice.toSemilatticeSup.{u3} (Submonoid.{u3} M _inst_1) (CompleteLattice.toLattice.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1)))) S T))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} M _inst_1) (T : Submonoid.{u3} M _inst_1), Eq.{succ u3} (Submonoid.{u3} M _inst_1) (Submonoid.comap.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Sup.sup.{u2} (Submonoid.{u2} N _inst_2) (SemilatticeSup.toSup.{u2} (Submonoid.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f T))) (Sup.sup.{u3} (Submonoid.{u3} M _inst_1) (SemilatticeSup.toSup.{u3} (Submonoid.{u3} M _inst_1) (Lattice.toSemilatticeSup.{u3} (Submonoid.{u3} M _inst_1) (CompleteLattice.toLattice.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1)))) S T))
 Case conversion may be inaccurate. Consider using '#align submonoid.comap_sup_map_of_injective Submonoid.comap_sup_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_sup_map_of_injective (S T : Submonoid M) : (S.map f ⊔ T.map f).comap f = S ⊔ T :=
@@ -672,7 +672,7 @@ theorem comap_sup_map_of_injective (S T : Submonoid M) : (S.map f ⊔ T.map f).c
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {ι : Type.{u4}} {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) (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 mc))) f)) -> (forall (S : ι -> (Submonoid.{u1} M _inst_1)), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (iSup.{u2, succ u4} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeSup.toHasSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.completeLattice.{u2} N _inst_2))) ι (fun (i : ι) => Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (S i)))) (iSup.{u1, succ u4} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.completeLattice.{u1} M _inst_1))) ι S))
 but is expected to have type
-  forall {M : Type.{u4}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u4} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u4, u3} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Injective.{succ u4, succ u3} M N (FunLike.coe.{succ u2, succ u4, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u2, u4, u3} F M N (MulOneClass.toMul.{u4} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u4, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} M _inst_1)), Eq.{succ u4} (Submonoid.{u4} M _inst_1) (Submonoid.comap.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (iSup.{u3, succ u1} (Submonoid.{u3} N _inst_2) (CompleteLattice.toSupSet.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2)) ι (fun (i : ι) => Submonoid.map.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (S i)))) (iSup.{u4, succ u1} (Submonoid.{u4} M _inst_1) (CompleteLattice.toSupSet.{u4} (Submonoid.{u4} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u4} M _inst_1)) ι S))
+  forall {M : Type.{u4}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u4} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u4, u3} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Injective.{succ u4, succ u3} M N (FunLike.coe.{succ u2, succ u4, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u2, u4, u3} F M N (MulOneClass.toMul.{u4} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u4, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} M _inst_1)), Eq.{succ u4} (Submonoid.{u4} M _inst_1) (Submonoid.comap.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (iSup.{u3, succ u1} (Submonoid.{u3} N _inst_2) (CompleteLattice.toSupSet.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2)) ι (fun (i : ι) => Submonoid.map.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (S i)))) (iSup.{u4, succ u1} (Submonoid.{u4} M _inst_1) (CompleteLattice.toSupSet.{u4} (Submonoid.{u4} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u4} M _inst_1)) ι S))
 Case conversion may be inaccurate. Consider using '#align submonoid.comap_supr_map_of_injective Submonoid.comap_iSup_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_iSup_map_of_injective (S : ι → Submonoid M) : (⨆ i, (S i).map f).comap f = iSup S :=
@@ -684,7 +684,7 @@ theorem comap_iSup_map_of_injective (S : ι → Submonoid M) : (⨆ i, (S i).map
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (forall {S : Submonoid.{u1} M _inst_1} {T : Submonoid.{u1} M _inst_1}, Iff (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T)) (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S T))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall {S : Submonoid.{u3} M _inst_1} {T : Submonoid.{u3} M _inst_1}, Iff (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toLE.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2))))) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f T)) (LE.le.{u3} (Submonoid.{u3} M _inst_1) (Preorder.toLE.{u3} (Submonoid.{u3} M _inst_1) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1))))) S T))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall {S : Submonoid.{u3} M _inst_1} {T : Submonoid.{u3} M _inst_1}, Iff (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toLE.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2))))) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f T)) (LE.le.{u3} (Submonoid.{u3} M _inst_1) (Preorder.toLE.{u3} (Submonoid.{u3} M _inst_1) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1))))) S T))
 Case conversion may be inaccurate. Consider using '#align submonoid.map_le_map_iff_of_injective Submonoid.map_le_map_iff_of_injectiveₓ'. -/
 @[to_additive]
 theorem map_le_map_iff_of_injective {S T : Submonoid M} : S.map f ≤ T.map f ↔ S ≤ T :=
@@ -696,7 +696,7 @@ theorem map_le_map_iff_of_injective {S T : Submonoid M} : S.map f ≤ T.map f 
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (StrictMono.{u1, u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (StrictMono.{u3, u2} (Submonoid.{u3} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (StrictMono.{u3, u2} (Submonoid.{u3} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f))
 Case conversion may be inaccurate. Consider using '#align submonoid.map_strict_mono_of_injective Submonoid.map_strictMono_of_injectiveₓ'. -/
 @[to_additive]
 theorem map_strictMono_of_injective : StrictMono (map f) :=
@@ -716,7 +716,7 @@ include hf
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (GaloisInsertion.{u1, u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{succ u3, succ u1, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 mc)) f)) -> (GaloisInsertion.{u1, u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{succ u3, succ u1, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 mc)) f)) -> (GaloisInsertion.{u1, u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
 Case conversion may be inaccurate. Consider using '#align submonoid.gi_map_comap Submonoid.giMapComapₓ'. -/
 /-- `map f` and `comap f` form a `galois_insertion` when `f` is surjective. -/
 @[to_additive " `map f` and `comap f` form a `galois_insertion` when `f` is surjective. "]
@@ -731,7 +731,7 @@ def giMapComap : GaloisInsertion (map f) (comap f) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (forall (S : Submonoid.{u2} N _inst_2), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)) S)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} N _inst_2), Eq.{succ u3} (Submonoid.{u3} N _inst_2) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S)) S)
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} N _inst_2), Eq.{succ u3} (Submonoid.{u3} N _inst_2) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S)) S)
 Case conversion may be inaccurate. Consider using '#align submonoid.map_comap_eq_of_surjective Submonoid.map_comap_eq_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_comap_eq_of_surjective (S : Submonoid N) : (S.comap f).map f = S :=
@@ -743,7 +743,7 @@ theorem map_comap_eq_of_surjective (S : Submonoid N) : (S.comap f).map f = S :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (Function.Surjective.{succ u1, succ u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (Function.Surjective.{succ u3, succ u2} (Submonoid.{u3} M _inst_1) (Submonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (Function.Surjective.{succ u3, succ u2} (Submonoid.{u3} M _inst_1) (Submonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f))
 Case conversion may be inaccurate. Consider using '#align submonoid.map_surjective_of_surjective Submonoid.map_surjective_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_surjective_of_surjective : Function.Surjective (map f) :=
@@ -755,7 +755,7 @@ theorem map_surjective_of_surjective : Function.Surjective (map f) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (Function.Injective.{succ u2, succ u1} (Submonoid.{u2} N _inst_2) (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (Function.Injective.{succ u3, succ u2} (Submonoid.{u3} N _inst_2) (Submonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (Function.Injective.{succ u3, succ u2} (Submonoid.{u3} N _inst_2) (Submonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f))
 Case conversion may be inaccurate. Consider using '#align submonoid.comap_injective_of_surjective Submonoid.comap_injective_of_surjectiveₓ'. -/
 @[to_additive]
 theorem comap_injective_of_surjective : Function.Injective (comap f) :=
@@ -767,7 +767,7 @@ theorem comap_injective_of_surjective : Function.Injective (comap f) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (forall (S : Submonoid.{u2} N _inst_2) (T : Submonoid.{u2} N _inst_2), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Inf.inf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasInf.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))) (Inf.inf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasInf.{u2} N _inst_2) S T))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} N _inst_2) (T : Submonoid.{u3} N _inst_2), Eq.{succ u3} (Submonoid.{u3} N _inst_2) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Inf.inf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instInfSubmonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f T))) (Inf.inf.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instInfSubmonoid.{u3} N _inst_2) S T))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} N _inst_2) (T : Submonoid.{u3} N _inst_2), Eq.{succ u3} (Submonoid.{u3} N _inst_2) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Inf.inf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instInfSubmonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f T))) (Inf.inf.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instInfSubmonoid.{u3} N _inst_2) S T))
 Case conversion may be inaccurate. Consider using '#align submonoid.map_inf_comap_of_surjective Submonoid.map_inf_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_inf_comap_of_surjective (S T : Submonoid N) : (S.comap f ⊓ T.comap f).map f = S ⊓ T :=
@@ -779,7 +779,7 @@ theorem map_inf_comap_of_surjective (S T : Submonoid N) : (S.comap f ⊓ T.comap
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {ι : Type.{u4}} {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (forall (S : ι -> (Submonoid.{u2} N _inst_2)), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (iInf.{u1, succ u4} (Submonoid.{u1} M _inst_1) (Submonoid.hasInf.{u1} M _inst_1) ι (fun (i : ι) => Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (S i)))) (iInf.{u2, succ u4} (Submonoid.{u2} N _inst_2) (Submonoid.hasInf.{u2} N _inst_2) ι S))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u4}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u4} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u3, u4} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Surjective.{succ u3, succ u4} M N (FunLike.coe.{succ u2, succ u3, succ u4} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u2, u3, u4} F M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u4} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u3, u4} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} N _inst_2)), Eq.{succ u4} (Submonoid.{u4} N _inst_2) (Submonoid.map.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (iInf.{u3, succ u1} (Submonoid.{u3} M _inst_1) (Submonoid.instInfSetSubmonoid.{u3} M _inst_1) ι (fun (i : ι) => Submonoid.comap.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (S i)))) (iInf.{u4, succ u1} (Submonoid.{u4} N _inst_2) (Submonoid.instInfSetSubmonoid.{u4} N _inst_2) ι S))
+  forall {M : Type.{u3}} {N : Type.{u4}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u4} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u3, u4} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Surjective.{succ u3, succ u4} M N (FunLike.coe.{succ u2, succ u3, succ u4} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u2, u3, u4} F M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u4} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u3, u4} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} N _inst_2)), Eq.{succ u4} (Submonoid.{u4} N _inst_2) (Submonoid.map.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (iInf.{u3, succ u1} (Submonoid.{u3} M _inst_1) (Submonoid.instInfSetSubmonoid.{u3} M _inst_1) ι (fun (i : ι) => Submonoid.comap.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (S i)))) (iInf.{u4, succ u1} (Submonoid.{u4} N _inst_2) (Submonoid.instInfSetSubmonoid.{u4} N _inst_2) ι S))
 Case conversion may be inaccurate. Consider using '#align submonoid.map_infi_comap_of_surjective Submonoid.map_iInf_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_iInf_comap_of_surjective (S : ι → Submonoid N) : (⨅ i, (S i).comap f).map f = iInf S :=
@@ -791,7 +791,7 @@ theorem map_iInf_comap_of_surjective (S : ι → Submonoid N) : (⨅ i, (S i).co
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (forall (S : Submonoid.{u2} N _inst_2) (T : Submonoid.{u2} N _inst_2), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Sup.sup.{u1} (Submonoid.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Submonoid.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.completeLattice.{u1} M _inst_1)))) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))) (Sup.sup.{u2} (Submonoid.{u2} N _inst_2) (SemilatticeSup.toHasSup.{u2} (Submonoid.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.completeLattice.{u2} N _inst_2)))) S T))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} N _inst_2) (T : Submonoid.{u3} N _inst_2), Eq.{succ u3} (Submonoid.{u3} N _inst_2) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Sup.sup.{u2} (Submonoid.{u2} M _inst_1) (SemilatticeSup.toSup.{u2} (Submonoid.{u2} M _inst_1) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1)))) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f T))) (Sup.sup.{u3} (Submonoid.{u3} N _inst_2) (SemilatticeSup.toSup.{u3} (Submonoid.{u3} N _inst_2) (Lattice.toSemilatticeSup.{u3} (Submonoid.{u3} N _inst_2) (CompleteLattice.toLattice.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2)))) S T))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} N _inst_2) (T : Submonoid.{u3} N _inst_2), Eq.{succ u3} (Submonoid.{u3} N _inst_2) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Sup.sup.{u2} (Submonoid.{u2} M _inst_1) (SemilatticeSup.toSup.{u2} (Submonoid.{u2} M _inst_1) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1)))) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f T))) (Sup.sup.{u3} (Submonoid.{u3} N _inst_2) (SemilatticeSup.toSup.{u3} (Submonoid.{u3} N _inst_2) (Lattice.toSemilatticeSup.{u3} (Submonoid.{u3} N _inst_2) (CompleteLattice.toLattice.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2)))) S T))
 Case conversion may be inaccurate. Consider using '#align submonoid.map_sup_comap_of_surjective Submonoid.map_sup_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_sup_comap_of_surjective (S T : Submonoid N) : (S.comap f ⊔ T.comap f).map f = S ⊔ T :=
@@ -803,7 +803,7 @@ theorem map_sup_comap_of_surjective (S T : Submonoid N) : (S.comap f ⊔ T.comap
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {ι : Type.{u4}} {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (forall (S : ι -> (Submonoid.{u2} N _inst_2)), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (iSup.{u1, succ u4} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.completeLattice.{u1} M _inst_1))) ι (fun (i : ι) => Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (S i)))) (iSup.{u2, succ u4} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeSup.toHasSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.completeLattice.{u2} N _inst_2))) ι S))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u4}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u4} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u3, u4} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Surjective.{succ u3, succ u4} M N (FunLike.coe.{succ u2, succ u3, succ u4} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u2, u3, u4} F M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u4} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u3, u4} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} N _inst_2)), Eq.{succ u4} (Submonoid.{u4} N _inst_2) (Submonoid.map.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (iSup.{u3, succ u1} (Submonoid.{u3} M _inst_1) (CompleteLattice.toSupSet.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1)) ι (fun (i : ι) => Submonoid.comap.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (S i)))) (iSup.{u4, succ u1} (Submonoid.{u4} N _inst_2) (CompleteLattice.toSupSet.{u4} (Submonoid.{u4} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u4} N _inst_2)) ι S))
+  forall {M : Type.{u3}} {N : Type.{u4}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u4} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u3, u4} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Surjective.{succ u3, succ u4} M N (FunLike.coe.{succ u2, succ u3, succ u4} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u2, u3, u4} F M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u4} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u3, u4} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} N _inst_2)), Eq.{succ u4} (Submonoid.{u4} N _inst_2) (Submonoid.map.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (iSup.{u3, succ u1} (Submonoid.{u3} M _inst_1) (CompleteLattice.toSupSet.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1)) ι (fun (i : ι) => Submonoid.comap.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (S i)))) (iSup.{u4, succ u1} (Submonoid.{u4} N _inst_2) (CompleteLattice.toSupSet.{u4} (Submonoid.{u4} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u4} N _inst_2)) ι S))
 Case conversion may be inaccurate. Consider using '#align submonoid.map_supr_comap_of_surjective Submonoid.map_iSup_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_iSup_comap_of_surjective (S : ι → Submonoid N) : (⨆ i, (S i).comap f).map f = iSup S :=
@@ -815,7 +815,7 @@ theorem map_iSup_comap_of_surjective (S : ι → Submonoid N) : (⨆ i, (S i).co
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (forall {S : Submonoid.{u2} N _inst_2} {T : Submonoid.{u2} N _inst_2}, Iff (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T)) (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) S T))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall {S : Submonoid.{u3} N _inst_2} {T : Submonoid.{u3} N _inst_2}, Iff (LE.le.{u2} (Submonoid.{u2} M _inst_1) (Preorder.toLE.{u2} (Submonoid.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1))))) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f T)) (LE.le.{u3} (Submonoid.{u3} N _inst_2) (Preorder.toLE.{u3} (Submonoid.{u3} N _inst_2) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2))))) S T))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall {S : Submonoid.{u3} N _inst_2} {T : Submonoid.{u3} N _inst_2}, Iff (LE.le.{u2} (Submonoid.{u2} M _inst_1) (Preorder.toLE.{u2} (Submonoid.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1))))) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f T)) (LE.le.{u3} (Submonoid.{u3} N _inst_2) (Preorder.toLE.{u3} (Submonoid.{u3} N _inst_2) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2))))) S T))
 Case conversion may be inaccurate. Consider using '#align submonoid.comap_le_comap_iff_of_surjective Submonoid.comap_le_comap_iff_of_surjectiveₓ'. -/
 @[to_additive]
 theorem comap_le_comap_iff_of_surjective {S T : Submonoid N} : S.comap f ≤ T.comap f ↔ S ≤ T :=
@@ -827,7 +827,7 @@ theorem comap_le_comap_iff_of_surjective {S T : Submonoid N} : S.comap f ≤ T.c
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (StrictMono.{u2, u1} (Submonoid.{u2} N _inst_2) (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2))) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (StrictMono.{u3, u2} (Submonoid.{u3} N _inst_2) (Submonoid.{u2} M _inst_1) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2)))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1)))) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (StrictMono.{u3, u2} (Submonoid.{u3} N _inst_2) (Submonoid.{u2} M _inst_1) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2)))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1)))) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f))
 Case conversion may be inaccurate. Consider using '#align submonoid.comap_strict_mono_of_surjective Submonoid.comap_strictMono_of_surjectiveₓ'. -/
 @[to_additive]
 theorem comap_strictMono_of_surjective : StrictMono (comap f) :=
@@ -1031,7 +1031,7 @@ def Subtype : S' →* M :=
 lean 3 declaration is
   forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {A : Type.{u2}} [_inst_4 : SetLike.{u2, u1} A M] [hA : SubmonoidClass.{u2, u1} A M _inst_1 _inst_4] (S' : A), Eq.{succ u1} ((fun (_x : MonoidHom.{u1, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') M (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 A _inst_4 hA S') _inst_1) => (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') -> M) (SubmonoidClass.Subtype.{u1, u2} M _inst_1 A _inst_4 hA S')) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') M (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 A _inst_4 hA S') _inst_1) (fun (_x : MonoidHom.{u1, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') M (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 A _inst_4 hA S') _inst_1) => (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') -> M) (MonoidHom.hasCoeToFun.{u1, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') M (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 A _inst_4 hA S') _inst_1) (SubmonoidClass.Subtype.{u1, u2} M _inst_1 A _inst_4 hA S')) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') M (coeBase.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_4) x S'))))))
 but is expected to have type
-  forall {M : Type.{u2}} [_inst_1 : MulOneClass.{u2} M] {A : Type.{u1}} [_inst_4 : SetLike.{u1, u2} A M] [hA : SubmonoidClass.{u1, u2} A M _inst_1 _inst_4] (S' : A), Eq.{succ u2} (forall (a : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) => M) a) (FunLike.coe.{succ u2, succ u2, succ u2} (MonoidHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) => M) _x) (MulHomClass.toFunLike.{u2, u2, u2} (MonoidHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (MulOneClass.toMul.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S')) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{u2, u2, u2} (MonoidHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1 (MonoidHom.monoidHomClass.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1))) (SubmonoidClass.Subtype.{u2, u1} M _inst_1 A _inst_4 hA S')) (Subtype.val.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S'))
+  forall {M : Type.{u2}} [_inst_1 : MulOneClass.{u2} M] {A : Type.{u1}} [_inst_4 : SetLike.{u1, u2} A M] [hA : SubmonoidClass.{u1, u2} A M _inst_1 _inst_4] (S' : A), Eq.{succ u2} (forall (a : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) => M) a) (FunLike.coe.{succ u2, succ u2, succ u2} (MonoidHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) => M) _x) (MulHomClass.toFunLike.{u2, u2, u2} (MonoidHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (MulOneClass.toMul.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S')) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{u2, u2, u2} (MonoidHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1 (MonoidHom.monoidHomClass.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1))) (SubmonoidClass.Subtype.{u2, u1} M _inst_1 A _inst_4 hA S')) (Subtype.val.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S'))
 Case conversion may be inaccurate. Consider using '#align submonoid_class.coe_subtype SubmonoidClass.coe_subtypeₓ'. -/
 @[simp, to_additive]
 theorem coe_subtype : (SubmonoidClass.Subtype S' : S' → M) = coe :=
@@ -1275,7 +1275,7 @@ def subtype : S →* M :=
 lean 3 declaration is
   forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1), Eq.{succ u1} ((coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) -> M) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) (fun (_x : MonoidHom.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) => (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) -> M) (MonoidHom.hasCoeToFun.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) (Submonoid.subtype.{u1} M _inst_1 S)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S))))))
 but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1), Eq.{succ u1} (forall (ᾰ : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) => M) ᾰ) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (fun (_x : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (MulOneClass.toMul.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u1} M _inst_1 S)) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1 (MonoidHom.monoidHomClass.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1))) (Submonoid.subtype.{u1} M _inst_1 S)) (Subtype.val.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S))
+  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1), Eq.{succ u1} (forall (ᾰ : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) => M) ᾰ) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (fun (_x : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (MulOneClass.toMul.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u1} M _inst_1 S)) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1 (MonoidHom.monoidHomClass.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1))) (Submonoid.subtype.{u1} M _inst_1 S)) (Subtype.val.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S))
 Case conversion may be inaccurate. Consider using '#align submonoid.coe_subtype Submonoid.coe_subtypeₓ'. -/
 @[simp, to_additive]
 theorem coe_subtype : ⇑S.Subtype = coe :=
@@ -1316,7 +1316,7 @@ theorem topEquiv_toMonoidHom : (topEquiv : _ ≃* M).toMonoidHom = (⊤ : Submon
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (S : Submonoid.{u1} M _inst_1) (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), (Function.Injective.{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)) -> (MulEquiv.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (S : Submonoid.{u1} M _inst_1) (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), (Function.Injective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, 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 u1 u2, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u1 u2, 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))) f)) -> (MulEquiv.{u1, u2} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (S : Submonoid.{u1} M _inst_1) (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), (Function.Injective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, 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 u1 u2, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u1 u2, 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))) f)) -> (MulEquiv.{u1, u2} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)))
 Case conversion may be inaccurate. Consider using '#align submonoid.equiv_map_of_injective Submonoid.equivMapOfInjectiveₓ'. -/
 /-- A subgroup is isomorphic to its image under an injective function. If you have an isomorphism,
 use `mul_equiv.submonoid_map` for better definitional equalities. -/
@@ -1331,7 +1331,7 @@ noncomputable def equivMapOfInjective (f : M →* N) (hf : Function.Injective f)
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (S : Submonoid.{u1} M _inst_1) (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2) (hf : Function.Injective.{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)) (x : coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S), Eq.{succ u2} N ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)))))) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MulEquiv.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S))) (fun (_x : MulEquiv.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S))) => (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) -> (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S))) (MulEquiv.hasCoeToFun.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S))) (Submonoid.equivMapOfInjective.{u1, u2} M N _inst_1 _inst_2 S f hf) 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 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S))))) x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (S : Submonoid.{u2} M _inst_1) (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2) (hf : Function.Injective.{succ u2, succ u1} M N (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 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)), Eq.{succ u1} N (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) _x) (EmbeddingLike.toFunLike.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (EquivLike.toEmbeddingLike.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (MulEquivClass.toEquivLike.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S)) (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S)))))) (Submonoid.equivMapOfInjective.{u2, u1} M N _inst_1 _inst_2 S f hf) 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 (Subtype.val.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Set.{u2} M) (Set.instMembershipSet.{u2} M) x (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) x))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (S : Submonoid.{u2} M _inst_1) (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2) (hf : Function.Injective.{succ u2, succ u1} M N (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 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)), Eq.{succ u1} N (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) _x) (EmbeddingLike.toFunLike.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (EquivLike.toEmbeddingLike.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (MulEquivClass.toEquivLike.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S)) (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S)))))) (Submonoid.equivMapOfInjective.{u2, u1} M N _inst_1 _inst_2 S f hf) 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 (Subtype.val.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Set.{u2} M) (Set.instMembershipSet.{u2} M) x (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) x))
 Case conversion may be inaccurate. Consider using '#align submonoid.coe_equiv_map_of_injective_apply Submonoid.coe_equivMapOfInjective_applyₓ'. -/
 @[simp, to_additive]
 theorem coe_equivMapOfInjective_apply (f : M →* N) (hf : Function.Injective f) (x : S) :
@@ -1682,7 +1682,7 @@ def mrange (f : F) : Submonoid N :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), Eq.{succ u2} (Set.{u2} N) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Submonoid.{u2} N _inst_2) (Set.{u2} N) (HasLiftT.mk.{succ u2, succ u2} (Submonoid.{u2} N _inst_2) (Set.{u2} N) (CoeTCₓ.coe.{succ u2, succ u2} (Submonoid.{u2} N _inst_2) (Set.{u2} N) (SetLike.Set.hasCoeT.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) (MonoidHom.mrange.{u1, u2, u3} M N _inst_1 _inst_2 F mc f)) (Set.range.{u2, succ u1} N M (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 mc))) f))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] (f : F), Eq.{succ u3} (Set.{u3} N) (SetLike.coe.{u3, u3} (Submonoid.{u3} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u3} N _inst_2) (MonoidHom.mrange.{u2, u3, u1} M N _inst_1 _inst_2 F mc f)) (Set.range.{u3, succ u2} N M (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] (f : F), Eq.{succ u3} (Set.{u3} N) (SetLike.coe.{u3, u3} (Submonoid.{u3} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u3} N _inst_2) (MonoidHom.mrange.{u2, u3, u1} M N _inst_1 _inst_2 F mc f)) (Set.range.{u3, succ u2} N M (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_mrange MonoidHom.coe_mrangeₓ'. -/
 @[simp, to_additive]
 theorem coe_mrange (f : F) : (mrange f : Set N) = Set.range f :=
@@ -1694,7 +1694,7 @@ theorem coe_mrange (f : F) : (mrange f : Set N) = Set.range f :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F} {y : N}, Iff (Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) y (MonoidHom.mrange.{u1, u2, u3} M N _inst_1 _inst_2 F mc f)) (Exists.{succ u1} M (fun (x : 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 (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 mc))) f x) y))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F} {y : N}, Iff (Membership.mem.{u3, u3} N (Submonoid.{u3} N _inst_2) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u3} N _inst_2)) y (MonoidHom.mrange.{u2, u3, u1} M N _inst_1 _inst_2 F mc f)) (Exists.{succ u2} M (fun (x : M) => Eq.{succ u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f x) y))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F} {y : N}, Iff (Membership.mem.{u3, u3} N (Submonoid.{u3} N _inst_2) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u3} N _inst_2)) y (MonoidHom.mrange.{u2, u3, u1} M N _inst_1 _inst_2 F mc f)) (Exists.{succ u2} M (fun (x : M) => Eq.{succ u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f x) y))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.mem_mrange MonoidHom.mem_mrangeₓ'. -/
 @[simp, to_additive]
 theorem mem_mrange {f : F} {y : N} : y ∈ mrange f ↔ ∃ x, f x = y :=
@@ -1734,7 +1734,7 @@ include mc
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, Iff (Eq.{succ u2} (Submonoid.{u2} N _inst_2) (MonoidHom.mrange.{u1, u2, u3} M N _inst_1 _inst_2 F mc f) (Top.top.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasTop.{u2} N _inst_2))) (Function.Surjective.{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) (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 mc))) f))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, Iff (Eq.{succ u3} (Submonoid.{u3} N _inst_2) (MonoidHom.mrange.{u2, u3, u1} M N _inst_1 _inst_2 F mc f) (Top.top.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instTopSubmonoid.{u3} N _inst_2))) (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, Iff (Eq.{succ u3} (Submonoid.{u3} N _inst_2) (MonoidHom.mrange.{u2, u3, u1} M N _inst_1 _inst_2 F mc f) (Top.top.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instTopSubmonoid.{u3} N _inst_2))) (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.mrange_top_iff_surjective MonoidHom.mrange_top_iff_surjectiveₓ'. -/
 @[to_additive]
 theorem mrange_top_iff_surjective {f : F} : mrange f = (⊤ : Submonoid N) ↔ Function.Surjective f :=
@@ -1746,7 +1746,7 @@ theorem mrange_top_iff_surjective {f : F} : mrange f = (⊤ : Submonoid N) ↔ F
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), (Function.Surjective.{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) (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 mc))) f)) -> (Eq.{succ u2} (Submonoid.{u2} N _inst_2) (MonoidHom.mrange.{u1, u2, u3} M N _inst_1 _inst_2 F mc f) (Top.top.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasTop.{u2} N _inst_2)))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F), (Function.Surjective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (Eq.{succ u2} (Submonoid.{u2} N _inst_2) (MonoidHom.mrange.{u3, u2, u1} M N _inst_1 _inst_2 F mc f) (Top.top.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instTopSubmonoid.{u2} N _inst_2)))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F), (Function.Surjective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (Eq.{succ u2} (Submonoid.{u2} N _inst_2) (MonoidHom.mrange.{u3, u2, u1} M N _inst_1 _inst_2 F mc f) (Top.top.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instTopSubmonoid.{u2} N _inst_2)))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.mrange_top_of_surjective MonoidHom.mrange_top_of_surjectiveₓ'. -/
 /-- The range of a surjective monoid hom is the whole of the codomain. -/
 @[to_additive "The range of a surjective `add_monoid` hom is the whole of the codomain."]
@@ -1760,7 +1760,7 @@ theorem mrange_top_of_surjective (f : F) (hf : Function.Surjective f) :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F) (s : Set.{u2} N), LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) (Submonoid.closure.{u1} M _inst_1 (Set.preimage.{u1, 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) (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 mc))) f) s)) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Submonoid.closure.{u2} N _inst_2 s))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] (f : F) (s : Set.{u3} N), LE.le.{u2} (Submonoid.{u2} M _inst_1) (Preorder.toLE.{u2} (Submonoid.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1))))) (Submonoid.closure.{u2} M _inst_1 (Set.preimage.{u2, u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f) s)) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Submonoid.closure.{u3} N _inst_2 s))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] (f : F) (s : Set.{u3} N), LE.le.{u2} (Submonoid.{u2} M _inst_1) (Preorder.toLE.{u2} (Submonoid.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1))))) (Submonoid.closure.{u2} M _inst_1 (Set.preimage.{u2, u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f) s)) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Submonoid.closure.{u3} N _inst_2 s))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.mclosure_preimage_le MonoidHom.mclosure_preimage_leₓ'. -/
 @[to_additive]
 theorem mclosure_preimage_le (f : F) (s : Set N) : closure (f ⁻¹' s) ≤ (closure s).comap f :=
@@ -1772,7 +1772,7 @@ theorem mclosure_preimage_le (f : F) (s : Set N) : closure (f ⁻¹' s) ≤ (clo
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F) (s : Set.{u1} M), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Submonoid.closure.{u1} M _inst_1 s)) (Submonoid.closure.{u2} N _inst_2 (Set.image.{u1, 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) (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 mc))) f) s))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) (s : Set.{u3} M), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Submonoid.closure.{u3} M _inst_1 s)) (Submonoid.closure.{u2} N _inst_2 (Set.image.{u3, u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f) s))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) (s : Set.{u3} M), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Submonoid.closure.{u3} M _inst_1 s)) (Submonoid.closure.{u2} N _inst_2 (Set.image.{u3, u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f) s))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_mclosure MonoidHom.map_mclosureₓ'. -/
 /-- The image under a monoid hom of the submonoid generated by a set equals the submonoid generated
     by the image of the set. -/
@@ -1802,7 +1802,7 @@ def restrict {N S : Type _} [MulOneClass N] [SetLike S M] [SubmonoidClass S M] (
 lean 3 declaration is
   forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {N : Type.{u2}} {S : Type.{u3}} [_inst_4 : MulOneClass.{u2} N] [_inst_5 : SetLike.{u3, u1} S M] [_inst_6 : SubmonoidClass.{u3, u1} S M _inst_1 _inst_5] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_4) (s : S) (x : coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s) N (SubmonoidClass.toMulOneClass.{u1, u3} M _inst_1 S _inst_5 _inst_6 s) _inst_4) (fun (_x : MonoidHom.{u1, u2} (coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s) N (SubmonoidClass.toMulOneClass.{u1, u3} M _inst_1 S _inst_5 _inst_6 s) _inst_4) => (coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s) -> N) (MonoidHom.hasCoeToFun.{u1, u2} (coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s) N (SubmonoidClass.toMulOneClass.{u1, u3} M _inst_1 S _inst_5 _inst_6 s) _inst_4) (MonoidHom.restrict.{u1, u2, u3} M _inst_1 N S _inst_4 _inst_5 _inst_6 f s) x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_4) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_4) f ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s) M (coeBase.{succ u1, succ u1} (coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u3} M S (SetLike.hasMem.{u3, u1} S M _inst_5) x s))))) x))
 but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {N : Type.{u3}} {S : Type.{u2}} [_inst_4 : MulOneClass.{u3} N] [_inst_5 : SetLike.{u2, u1} S M] [_inst_6 : SubmonoidClass.{u2, u1} S M _inst_1 _inst_5] (f : MonoidHom.{u1, u3} M N _inst_1 _inst_4) (s : S) (x : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)), Eq.{succ u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) => N) x) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (MonoidHom.{u1, u3} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) (fun (_x : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) => N) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} (MonoidHom.{u1, u3} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (MulOneClass.toMul.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s)) (MulOneClass.toMul.{u3} N _inst_4) (MonoidHomClass.toMulHomClass.{max u1 u3, u1, u3} (MonoidHom.{u1, u3} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4 (MonoidHom.monoidHomClass.{u1, u3} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4))) (MonoidHom.restrict.{u1, u3, u2} M _inst_1 N S _inst_4 _inst_5 _inst_6 f s) x) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (MonoidHom.{u1, u3} M N _inst_1 _inst_4) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} (MonoidHom.{u1, u3} M N _inst_1 _inst_4) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u3} N _inst_4) (MonoidHomClass.toMulHomClass.{max u1 u3, u1, u3} (MonoidHom.{u1, u3} M N _inst_1 _inst_4) M N _inst_1 _inst_4 (MonoidHom.monoidHomClass.{u1, u3} M N _inst_1 _inst_4))) f (Subtype.val.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) x (SetLike.coe.{u2, u1} S M _inst_5 s)) x))
+  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {N : Type.{u3}} {S : Type.{u2}} [_inst_4 : MulOneClass.{u3} N] [_inst_5 : SetLike.{u2, u1} S M] [_inst_6 : SubmonoidClass.{u2, u1} S M _inst_1 _inst_5] (f : MonoidHom.{u1, u3} M N _inst_1 _inst_4) (s : S) (x : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)), Eq.{succ u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) => N) x) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (MonoidHom.{u1, u3} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) (fun (_x : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) => N) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} (MonoidHom.{u1, u3} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (MulOneClass.toMul.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s)) (MulOneClass.toMul.{u3} N _inst_4) (MonoidHomClass.toMulHomClass.{max u1 u3, u1, u3} (MonoidHom.{u1, u3} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4 (MonoidHom.monoidHomClass.{u1, u3} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4))) (MonoidHom.restrict.{u1, u3, u2} M _inst_1 N S _inst_4 _inst_5 _inst_6 f s) x) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (MonoidHom.{u1, u3} M N _inst_1 _inst_4) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} (MonoidHom.{u1, u3} M N _inst_1 _inst_4) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u3} N _inst_4) (MonoidHomClass.toMulHomClass.{max u1 u3, u1, u3} (MonoidHom.{u1, u3} M N _inst_1 _inst_4) M N _inst_1 _inst_4 (MonoidHom.monoidHomClass.{u1, u3} M N _inst_1 _inst_4))) f (Subtype.val.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) x (SetLike.coe.{u2, u1} S M _inst_5 s)) x))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.restrict_apply MonoidHom.restrict_applyₓ'. -/
 @[simp, to_additive]
 theorem restrict_apply {N S : Type _} [MulOneClass N] [SetLike S M] [SubmonoidClass S M]
@@ -1828,7 +1828,7 @@ theorem restrict_mrange (f : M →* N) : (f.restrict S).mrange = S.map f := by
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {S : Type.{u3}} [_inst_4 : SetLike.{u3, u2} S N] [_inst_5 : SubmonoidClass.{u3, u2} S N _inst_2 _inst_4] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2) (s : S), (forall (x : M), Membership.Mem.{u2, u3} N S (SetLike.hasMem.{u3, u2} S N _inst_4) (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) s) -> (MonoidHom.{u1, u2} M (coeSort.{succ u3, succ (succ u2)} S Type.{u2} (SetLike.hasCoeToSort.{u3, u2} S N _inst_4) s) _inst_1 (SubmonoidClass.toMulOneClass.{u2, u3} N _inst_2 S _inst_4 _inst_5 s))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {S : Type.{u3}} [_inst_4 : SetLike.{u3, u2} S N] [_inst_5 : SubmonoidClass.{u3, u2} S N _inst_2 _inst_4] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2) (s : S), (forall (x : M), Membership.mem.{u2, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) S (SetLike.instMembership.{u3, u2} S N _inst_4) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, 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 u1 u2, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u1 u2, 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))) f x) s) -> (MonoidHom.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u3} N S (SetLike.instMembership.{u3, u2} S N _inst_4) x s)) _inst_1 (SubmonoidClass.toMulOneClass.{u2, u3} N _inst_2 S _inst_4 _inst_5 s))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {S : Type.{u3}} [_inst_4 : SetLike.{u3, u2} S N] [_inst_5 : SubmonoidClass.{u3, u2} S N _inst_2 _inst_4] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2) (s : S), (forall (x : M), Membership.mem.{u2, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) S (SetLike.instMembership.{u3, u2} S N _inst_4) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, 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 u1 u2, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u1 u2, 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))) f x) s) -> (MonoidHom.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u3} N S (SetLike.instMembership.{u3, u2} S N _inst_4) x s)) _inst_1 (SubmonoidClass.toMulOneClass.{u2, u3} N _inst_2 S _inst_4 _inst_5 s))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.cod_restrict MonoidHom.codRestrictₓ'. -/
 /-- Restriction of a monoid hom to a submonoid of the codomain. -/
 @[to_additive "Restriction of an `add_monoid` hom to an `add_submonoid` of the codomain.",
@@ -1858,7 +1858,7 @@ def mrangeRestrict {N} [MulOneClass N] (f : M →* N) : M →* f.mrange :=
 lean 3 declaration is
   forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {N : Type.{u2}} [_inst_4 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_4) (x : M), Eq.{succ u2} N ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_4) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_4) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_4) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_4) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)))))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_4) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (fun (_x : MonoidHom.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_4) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) => M -> (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_4) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (MonoidHom.hasCoeToFun.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_4) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (MonoidHom.mrangeRestrict.{u1, u2} M _inst_1 N _inst_4 f) x)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_4) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_4) f x)
 but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {N : Type.{u2}} [_inst_4 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_4) (x : M), Eq.{succ u2} N (Subtype.val.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Set.{u2} N) (Set.instMembershipSet.{u2} N) x (SetLike.coe.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4) (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) (MonoidHom.monoidHomClass.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))))) (MonoidHom.mrangeRestrict.{u1, u2} M _inst_1 N _inst_4 f) x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_4) 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 _inst_1 _inst_4) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_4) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_4) M N _inst_1 _inst_4 (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4))) f x)
+  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {N : Type.{u2}} [_inst_4 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_4) (x : M), Eq.{succ u2} N (Subtype.val.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Set.{u2} N) (Set.instMembershipSet.{u2} N) x (SetLike.coe.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4) (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) (MonoidHom.monoidHomClass.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))))) (MonoidHom.mrangeRestrict.{u1, u2} M _inst_1 N _inst_4 f) x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_4) 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 _inst_1 _inst_4) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_4) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_4) M N _inst_1 _inst_4 (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4))) f x)
 Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_mrange_restrict MonoidHom.coe_mrangeRestrictₓ'. -/
 @[simp, to_additive]
 theorem coe_mrangeRestrict {N} [MulOneClass N] (f : M →* N) (x : M) :
@@ -1871,7 +1871,7 @@ theorem coe_mrangeRestrict {N} [MulOneClass N] (f : M →* N) (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), Function.Surjective.{succ u1, succ u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_2 (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f))) (fun (_x : MonoidHom.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_2 (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f))) => M -> (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f))) (MonoidHom.hasCoeToFun.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_2 (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f))) (MonoidHom.mrangeRestrict.{u1, u2} M _inst_1 N _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), Function.Surjective.{succ u2, succ u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} 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 (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f)) (MonoidHom.monoidHomClass.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))))) (MonoidHom.mrangeRestrict.{u2, u1} M _inst_1 N _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), Function.Surjective.{succ u2, succ u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} 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 (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f)) (MonoidHom.monoidHomClass.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))))) (MonoidHom.mrangeRestrict.{u2, u1} M _inst_1 N _inst_2 f))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.mrange_restrict_surjective MonoidHom.mrangeRestrict_surjectiveₓ'. -/
 @[to_additive]
 theorem mrangeRestrict_surjective (f : M →* N) : Function.Surjective f.mrangeRestrict :=
@@ -1896,7 +1896,7 @@ def mker (f : F) : Submonoid M :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F) {x : M}, Iff (Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x (MonoidHom.mker.{u1, u2, u3} M N _inst_1 _inst_2 F mc 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) (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 mc))) f 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.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) {x : M}, Iff (Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x (MonoidHom.mker.{u3, u2, u1} M N _inst_1 _inst_2 F mc f)) (Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) 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) _inst_2))))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) {x : M}, Iff (Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x (MonoidHom.mker.{u3, u2, u1} M N _inst_1 _inst_2 F mc f)) (Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) 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) _inst_2))))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.mem_mker MonoidHom.mem_mkerₓ'. -/
 @[to_additive]
 theorem mem_mker (f : F) {x : M} : x ∈ mker f ↔ f x = 1 :=
@@ -1908,7 +1908,7 @@ theorem mem_mker (f : F) {x : M} : x ∈ mker f ↔ f x = 1 :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), Eq.{succ u1} (Set.{u1} M) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) (MonoidHom.mker.{u1, u2, u3} M N _inst_1 _inst_2 F mc f)) (Set.preimage.{u1, 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) (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 mc))) f) (Singleton.singleton.{u2, u2} N (Set.{u2} N) (Set.hasSingleton.{u2} N) (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.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F), Eq.{succ u3} (Set.{u3} M) (SetLike.coe.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1) (MonoidHom.mker.{u3, u2, u1} M N _inst_1 _inst_2 F mc f)) (Set.preimage.{u3, u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f) (Singleton.singleton.{u2, u2} N (Set.{u2} N) (Set.instSingletonSet.{u2} N) (OfNat.ofNat.{u2} N 1 (One.toOfNat1.{u2} N (MulOneClass.toOne.{u2} N _inst_2)))))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F), Eq.{succ u3} (Set.{u3} M) (SetLike.coe.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1) (MonoidHom.mker.{u3, u2, u1} M N _inst_1 _inst_2 F mc f)) (Set.preimage.{u3, u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f) (Singleton.singleton.{u2, u2} N (Set.{u2} N) (Set.instSingletonSet.{u2} N) (OfNat.ofNat.{u2} N 1 (One.toOfNat1.{u2} N (MulOneClass.toOne.{u2} N _inst_2)))))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_mker MonoidHom.coe_mkerₓ'. -/
 @[to_additive]
 theorem coe_mker (f : F) : (mker f : Set M) = (f : M → N) ⁻¹' {1} :=
@@ -2090,7 +2090,7 @@ def submonoidMap (f : M →* N) (M' : Submonoid M) : M' →* M'.map 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) (M' : Submonoid.{u1} M _inst_1), Function.Surjective.{succ u1, succ u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) M') (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M')) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) M') (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M')) (Submonoid.toMulOneClass.{u1} M _inst_1 M') (Submonoid.toMulOneClass.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M'))) (fun (_x : MonoidHom.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) M') (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M')) (Submonoid.toMulOneClass.{u1} M _inst_1 M') (Submonoid.toMulOneClass.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M'))) => (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) M') -> (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M'))) (MonoidHom.hasCoeToFun.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) M') (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M')) (Submonoid.toMulOneClass.{u1} M _inst_1 M') (Submonoid.toMulOneClass.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M'))) (MonoidHom.submonoidMap.{u1, u2} M N _inst_1 _inst_2 f M'))
 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) (M' : Submonoid.{u2} M _inst_1), Function.Surjective.{succ u2, succ u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (MulOneClass.toMul.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Submonoid.toMulOneClass.{u2} M _inst_1 M')) (MulOneClass.toMul.{u1} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M')) (MonoidHom.monoidHomClass.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))))) (MonoidHom.submonoidMap.{u2, u1} M N _inst_1 _inst_2 f M'))
+  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) (M' : Submonoid.{u2} M _inst_1), Function.Surjective.{succ u2, succ u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (MulOneClass.toMul.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Submonoid.toMulOneClass.{u2} M _inst_1 M')) (MulOneClass.toMul.{u1} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M')) (MonoidHom.monoidHomClass.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))))) (MonoidHom.submonoidMap.{u2, u1} M N _inst_1 _inst_2 f M'))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.submonoid_map_surjective MonoidHom.submonoidMap_surjectiveₓ'. -/
 @[to_additive]
 theorem submonoidMap_surjective (f : M →* N) (M' : Submonoid M) :
@@ -2331,7 +2331,7 @@ def submonoidCongr (h : S = T) : S ≃* T :=
 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 : N -> M}, (Function.LeftInverse.{succ u1, succ u2} M N 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)) -> (MulEquiv.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)) (MulOneClass.toHasMul.{u1} M _inst_1) (Submonoid.mul.{u2} N _inst_2 (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)))
 but is expected to have type
-  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 : N -> M}, (Function.LeftInverse.{succ u1, succ u2} M N g (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, 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 u1 u2, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u1 u2, 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))) f)) -> (MulEquiv.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f))) (MulOneClass.toMul.{u1} M _inst_1) (Submonoid.mul.{u2} N _inst_2 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)))
+  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 : N -> M}, (Function.LeftInverse.{succ u1, succ u2} M N g (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, 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 u1 u2, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u1 u2, 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))) f)) -> (MulEquiv.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f))) (MulOneClass.toMul.{u1} M _inst_1) (Submonoid.mul.{u2} N _inst_2 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)))
 Case conversion may be inaccurate. Consider using '#align mul_equiv.of_left_inverse' MulEquiv.ofLeftInverse'ₓ'. -/
 -- this name is primed so that the version to `f.range` instead of `f.mrange` can be unprimed.
 /-- A monoid homomorphism `f : M →* N` with a left-inverse `g : N → M` defines a multiplicative
@@ -2386,7 +2386,7 @@ theorem coe_submonoidMap_apply (e : M ≃* N) (S : Submonoid M) (g : S) :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (e : MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (S : Submonoid.{u1} M _inst_1) (g : coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)), Eq.{succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S)) (fun (_x : MulEquiv.{u2, u1} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S)) => (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) -> (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S)) (MulEquiv.hasCoeToFun.{u2, u1} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S)) (MulEquiv.symm.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (MulEquiv.submonoidMap.{u1, u2} M N _inst_1 _inst_2 e S)) g) (Subtype.mk.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (fun (_x : MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) => N -> M) (MulEquiv.hasCoeToFun.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (MulEquiv.symm.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g)) (Iff.mp (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (fun (_x : MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) => N -> M) (MulEquiv.hasCoeToFun.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (MulEquiv.symm.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S)) (Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (fun (_x : MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) => N -> M) (MulEquiv.hasCoeToFun.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (MulEquiv.symm.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g)) S) (SetLike.mem_coe.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1) S (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (fun (_x : MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) => N -> M) (MulEquiv.hasCoeToFun.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (MulEquiv.symm.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g))) (Iff.mp (Membership.Mem.{u2, u2} N (Set.{u2} N) (Set.hasMem.{u2} N) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g) (Set.image.{u1, u2} M N (coeFn.{max 1 (max (succ u1) (succ u2)) (succ u2) (succ u1), max (succ u1) (succ u2)} (Equiv.{succ u1, succ u2} M N) (fun (_x : Equiv.{succ u1, succ u2} M N) => M -> N) (Equiv.hasCoeToFun.{succ u1, succ u2} M N) (MulEquiv.toEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S))) (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} N M) (fun (_x : Equiv.{succ u2, succ u1} N M) => N -> M) (Equiv.hasCoeToFun.{succ u2, succ u1} N M) (Equiv.symm.{succ u1, succ u2} M N (MulEquiv.toEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e)) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S)) (Set.mem_image_equiv.{u1, u2} M N ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S) (MulEquiv.toEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g)) (Subtype.property.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) g))))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (e : MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) (S : Submonoid.{u2} M _inst_1) (g : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))), Eq.{succ u2} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) => Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) g) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (fun (_x : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) => Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (EquivLike.toEmbeddingLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (MulEquivClass.toEquivLike.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S))))) (MulEquiv.symm.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (MulEquiv.submonoidMap.{u2, u1} M N _inst_1 _inst_2 e S)) g) (Subtype.mk.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : N) => M) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (EquivLike.toEmbeddingLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulEquivClass.toEquivLike.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (Iff.mp (Membership.mem.{u2, u2} M (Set.{u2} M) (Set.instMembershipSet.{u2} M) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : N) => M) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (EquivLike.toEmbeddingLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulEquivClass.toEquivLike.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) (Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : N) => M) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (EquivLike.toEmbeddingLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulEquivClass.toEquivLike.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) S) (SetLike.mem_coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : N) => M) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (EquivLike.toEmbeddingLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulEquivClass.toEquivLike.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g))) (Iff.mp (Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g) (Set.image.{u2, u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (Equiv.{succ u2, succ u1} M N) M (fun (_x : M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : M) => N) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} M N) (MulEquiv.toEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e)) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S))) (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : N) => M) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (Set.{u2} M) (Set.instMembershipSet.{u2} M) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (Equiv.{succ u1, succ u2} N M) N (fun (_x : N) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : N) => M) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u2} N M) (Equiv.symm.{succ u2, succ u1} M N (MulEquiv.toEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e)) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) (Set.mem_image_equiv.{u1, u2} M N (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S) (MulEquiv.toEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (Subtype.property.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S)) g))))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (e : MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) (S : Submonoid.{u2} M _inst_1) (g : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))), Eq.{succ u2} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) => Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) g) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (fun (_x : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) => Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (EquivLike.toEmbeddingLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (MulEquivClass.toEquivLike.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S))))) (MulEquiv.symm.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (MulEquiv.submonoidMap.{u2, u1} M N _inst_1 _inst_2 e S)) g) (Subtype.mk.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : N) => M) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (EquivLike.toEmbeddingLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulEquivClass.toEquivLike.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (Iff.mp (Membership.mem.{u2, u2} M (Set.{u2} M) (Set.instMembershipSet.{u2} M) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : N) => M) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (EquivLike.toEmbeddingLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulEquivClass.toEquivLike.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) (Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : N) => M) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (EquivLike.toEmbeddingLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulEquivClass.toEquivLike.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) S) (SetLike.mem_coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : N) => M) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (EquivLike.toEmbeddingLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulEquivClass.toEquivLike.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g))) (Iff.mp (Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g) (Set.image.{u2, u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (Equiv.{succ u2, succ u1} M N) M (fun (_x : M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : M) => N) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} M N) (MulEquiv.toEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e)) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S))) (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : N) => M) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (Set.{u2} M) (Set.instMembershipSet.{u2} M) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (Equiv.{succ u1, succ u2} N M) N (fun (_x : N) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : N) => M) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u2} N M) (Equiv.symm.{succ u2, succ u1} M N (MulEquiv.toEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e)) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) (Set.mem_image_equiv.{u1, u2} M N (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S) (MulEquiv.toEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (Subtype.property.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S)) g))))
 Case conversion may be inaccurate. Consider using '#align mul_equiv.submonoid_map_symm_apply MulEquiv.submonoidMap_symm_applyₓ'. -/
 @[simp, to_additive AddEquiv.add_submonoid_map_symm_apply]
 theorem submonoidMap_symm_apply (e : M ≃* N) (S : Submonoid M) (g : S.map (e : M →* N)) :
Diff
@@ -82,7 +82,7 @@ section
 
 /- warning: submonoid.to_add_submonoid -> Submonoid.toAddSubmonoid is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M], OrderIso.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))
+  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M], OrderIso.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))
 but is expected to have type
   forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M], OrderIso.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))))))
 Case conversion may be inaccurate. Consider using '#align submonoid.to_add_submonoid Submonoid.toAddSubmonoidₓ'. -/
@@ -105,7 +105,7 @@ def Submonoid.toAddSubmonoid : Submonoid M ≃o AddSubmonoid (Additive M)
 
 /- warning: add_submonoid.to_submonoid' -> AddSubmonoid.toSubmonoid' is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M], OrderIso.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))))) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))))
+  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M], OrderIso.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))))) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))))
 but is expected to have type
   forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M], OrderIso.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1)))))
 Case conversion may be inaccurate. Consider using '#align add_submonoid.to_submonoid' AddSubmonoid.toSubmonoid'ₓ'. -/
@@ -116,7 +116,7 @@ abbrev AddSubmonoid.toSubmonoid' : AddSubmonoid (Additive M) ≃o Submonoid M :=
 
 /- warning: submonoid.to_add_submonoid_closure -> Submonoid.toAddSubmonoid_closure is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Set.{u1} M), Eq.{succ u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) (fun (_x : RelIso.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))))) (LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))))))) => (Submonoid.{u1} M _inst_1) -> (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))) (RelIso.hasCoeToFun.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))))) (LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))))))) (Submonoid.toAddSubmonoid.{u1} M _inst_1) (Submonoid.closure.{u1} M _inst_1 S)) (AddSubmonoid.closure.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1) (Set.preimage.{u1, u1} (Additive.{u1} M) M (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (Additive.{u1} M) M) (fun (_x : Equiv.{succ u1, succ u1} (Additive.{u1} M) M) => (Additive.{u1} M) -> M) (Equiv.hasCoeToFun.{succ u1, succ u1} (Additive.{u1} M) M) (Additive.toMul.{u1} M)) S))
+  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Set.{u1} M), Eq.{succ u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) (fun (_x : RelIso.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))))) (LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))))))) => (Submonoid.{u1} M _inst_1) -> (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))) (RelIso.hasCoeToFun.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))))) (LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))))))) (Submonoid.toAddSubmonoid.{u1} M _inst_1) (Submonoid.closure.{u1} M _inst_1 S)) (AddSubmonoid.closure.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1) (Set.preimage.{u1, u1} (Additive.{u1} M) M (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (Additive.{u1} M) M) (fun (_x : Equiv.{succ u1, succ u1} (Additive.{u1} M) M) => (Additive.{u1} M) -> M) (Equiv.hasCoeToFun.{succ u1, succ u1} (Additive.{u1} M) M) (Additive.toMul.{u1} M)) S))
 but is expected to have type
   forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Set.{u1} M), Eq.{succ u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (Submonoid.{u1} M _inst_1) (fun (_x : Submonoid.{u1} M _inst_1) => AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.instRelHomClassRelIso.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298))) (Submonoid.toAddSubmonoid.{u1} M _inst_1) (Submonoid.closure.{u1} M _inst_1 S)) (AddSubmonoid.closure.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1) (Set.preimage.{u1, u1} (Additive.{u1} M) M (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} (Additive.{u1} M) M) (Additive.{u1} M) (fun (_x : Additive.{u1} M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Additive.{u1} M) => M) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} (Additive.{u1} M) M) (Additive.toMul.{u1} M)) S))
 Case conversion may be inaccurate. Consider using '#align submonoid.to_add_submonoid_closure Submonoid.toAddSubmonoid_closureₓ'. -/
@@ -129,7 +129,7 @@ theorem Submonoid.toAddSubmonoid_closure (S : Set M) :
 
 /- warning: add_submonoid.to_submonoid'_closure -> AddSubmonoid.toSubmonoid'_closure is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Set.{u1} (Additive.{u1} M)), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))))) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))))) (fun (_x : RelIso.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))))) => (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) -> (Submonoid.{u1} M _inst_1)) (RelIso.hasCoeToFun.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))))) (AddSubmonoid.toSubmonoid'.{u1} M _inst_1) (AddSubmonoid.closure.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1) S)) (Submonoid.closure.{u1} M _inst_1 (Set.preimage.{u1, u1} M (Multiplicative.{u1} M) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} M (Multiplicative.{u1} M)) (fun (_x : Equiv.{succ u1, succ u1} M (Multiplicative.{u1} M)) => M -> (Multiplicative.{u1} M)) (Equiv.hasCoeToFun.{succ u1, succ u1} M (Multiplicative.{u1} M)) (Multiplicative.ofAdd.{u1} M)) S))
+  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Set.{u1} (Additive.{u1} M)), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))))) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))))) (fun (_x : RelIso.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))))) => (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) -> (Submonoid.{u1} M _inst_1)) (RelIso.hasCoeToFun.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))))) (AddSubmonoid.toSubmonoid'.{u1} M _inst_1) (AddSubmonoid.closure.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1) S)) (Submonoid.closure.{u1} M _inst_1 (Set.preimage.{u1, u1} M (Multiplicative.{u1} M) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} M (Multiplicative.{u1} M)) (fun (_x : Equiv.{succ u1, succ u1} M (Multiplicative.{u1} M)) => M -> (Multiplicative.{u1} M)) (Equiv.hasCoeToFun.{succ u1, succ u1} M (Multiplicative.{u1} M)) (Multiplicative.ofAdd.{u1} M)) S))
 but is expected to have type
   forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Set.{u1} (Additive.{u1} M)), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (fun (_x : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => Submonoid.{u1} M _inst_1) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.instRelHomClassRelIso.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298))) (AddSubmonoid.toSubmonoid'.{u1} M _inst_1) (AddSubmonoid.closure.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1) S)) (Submonoid.closure.{u1} M _inst_1 (Set.preimage.{u1, u1} M (Multiplicative.{u1} M) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} M (Multiplicative.{u1} M)) M (fun (_x : M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : M) => Multiplicative.{u1} M) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} M (Multiplicative.{u1} M)) (Multiplicative.ofAdd.{u1} M)) S))
 Case conversion may be inaccurate. Consider using '#align add_submonoid.to_submonoid'_closure AddSubmonoid.toSubmonoid'_closureₓ'. -/
@@ -149,7 +149,7 @@ variable {A : Type _} [AddZeroClass A]
 
 /- warning: add_submonoid.to_submonoid -> AddSubmonoid.toSubmonoid is a dubious translation:
 lean 3 declaration is
-  forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A], OrderIso.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4)))) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))
+  forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A], OrderIso.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4)))) (Preorder.toHasLe.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))
 but is expected to have type
   forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A], OrderIso.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))))))
 Case conversion may be inaccurate. Consider using '#align add_submonoid.to_submonoid AddSubmonoid.toSubmonoidₓ'. -/
@@ -173,7 +173,7 @@ def AddSubmonoid.toSubmonoid : AddSubmonoid A ≃o Submonoid (Multiplicative A)
 
 /- warning: submonoid.to_add_submonoid' -> Submonoid.toAddSubmonoid' is a dubious translation:
 lean 3 declaration is
-  forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A], OrderIso.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))))) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4))))
+  forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A], OrderIso.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (Preorder.toHasLe.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))))) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4))))
 but is expected to have type
   forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A], OrderIso.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4)))))
 Case conversion may be inaccurate. Consider using '#align submonoid.to_add_submonoid' Submonoid.toAddSubmonoid'ₓ'. -/
@@ -184,7 +184,7 @@ abbrev Submonoid.toAddSubmonoid' : Submonoid (Multiplicative A) ≃o AddSubmonoi
 
 /- warning: add_submonoid.to_submonoid_closure -> AddSubmonoid.toSubmonoid_closure is a dubious translation:
 lean 3 declaration is
-  forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A] (S : Set.{u1} A), Eq.{succ u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4)))) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) (fun (_x : RelIso.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4))))) (LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))))))) => (AddSubmonoid.{u1} A _inst_4) -> (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))) (RelIso.hasCoeToFun.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4))))) (LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))))))) (AddSubmonoid.toSubmonoid.{u1} A _inst_4) (AddSubmonoid.closure.{u1} A _inst_4 S)) (Submonoid.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4) (Set.preimage.{u1, u1} (Multiplicative.{u1} A) A (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (Multiplicative.{u1} A) A) (fun (_x : Equiv.{succ u1, succ u1} (Multiplicative.{u1} A) A) => (Multiplicative.{u1} A) -> A) (Equiv.hasCoeToFun.{succ u1, succ u1} (Multiplicative.{u1} A) A) (Multiplicative.toAdd.{u1} A)) S))
+  forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A] (S : Set.{u1} A), Eq.{succ u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4)))) (Preorder.toHasLe.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) (fun (_x : RelIso.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4))))) (LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toHasLe.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))))))) => (AddSubmonoid.{u1} A _inst_4) -> (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))) (RelIso.hasCoeToFun.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4))))) (LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toHasLe.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))))))) (AddSubmonoid.toSubmonoid.{u1} A _inst_4) (AddSubmonoid.closure.{u1} A _inst_4 S)) (Submonoid.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4) (Set.preimage.{u1, u1} (Multiplicative.{u1} A) A (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (Multiplicative.{u1} A) A) (fun (_x : Equiv.{succ u1, succ u1} (Multiplicative.{u1} A) A) => (Multiplicative.{u1} A) -> A) (Equiv.hasCoeToFun.{succ u1, succ u1} (Multiplicative.{u1} A) A) (Multiplicative.toAdd.{u1} A)) S))
 but is expected to have type
   forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A] (S : Set.{u1} A), Eq.{succ u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (AddSubmonoid.{u1} A _inst_4) (fun (_x : AddSubmonoid.{u1} A _inst_4) => Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.instRelHomClassRelIso.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298))) (AddSubmonoid.toSubmonoid.{u1} A _inst_4) (AddSubmonoid.closure.{u1} A _inst_4 S)) (Submonoid.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4) (Set.preimage.{u1, u1} (Multiplicative.{u1} A) A (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} (Multiplicative.{u1} A) A) (Multiplicative.{u1} A) (fun (_x : Multiplicative.{u1} A) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Multiplicative.{u1} A) => A) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} (Multiplicative.{u1} A) A) (Multiplicative.toAdd.{u1} A)) S))
 Case conversion may be inaccurate. Consider using '#align add_submonoid.to_submonoid_closure AddSubmonoid.toSubmonoid_closureₓ'. -/
@@ -198,7 +198,7 @@ theorem AddSubmonoid.toSubmonoid_closure (S : Set A) :
 
 /- warning: submonoid.to_add_submonoid'_closure -> Submonoid.toAddSubmonoid'_closure is a dubious translation:
 lean 3 declaration is
-  forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A] (S : Set.{u1} (Multiplicative.{u1} A)), Eq.{succ u1} (AddSubmonoid.{u1} A _inst_4) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))))) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4))))) (fun (_x : RelIso.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) (LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4)))))) => (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) -> (AddSubmonoid.{u1} A _inst_4)) (RelIso.hasCoeToFun.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) (LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4)))))) (Submonoid.toAddSubmonoid'.{u1} A _inst_4) (Submonoid.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4) S)) (AddSubmonoid.closure.{u1} A _inst_4 (Set.preimage.{u1, u1} A (Additive.{u1} A) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} A (Additive.{u1} A)) (fun (_x : Equiv.{succ u1, succ u1} A (Additive.{u1} A)) => A -> (Additive.{u1} A)) (Equiv.hasCoeToFun.{succ u1, succ u1} A (Additive.{u1} A)) (Additive.ofMul.{u1} A)) S))
+  forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A] (S : Set.{u1} (Multiplicative.{u1} A)), Eq.{succ u1} (AddSubmonoid.{u1} A _inst_4) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (Preorder.toHasLe.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))))) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4))))) (fun (_x : RelIso.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toHasLe.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) (LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4)))))) => (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) -> (AddSubmonoid.{u1} A _inst_4)) (RelIso.hasCoeToFun.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toHasLe.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) (LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toHasLe.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4)))))) (Submonoid.toAddSubmonoid'.{u1} A _inst_4) (Submonoid.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4) S)) (AddSubmonoid.closure.{u1} A _inst_4 (Set.preimage.{u1, u1} A (Additive.{u1} A) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} A (Additive.{u1} A)) (fun (_x : Equiv.{succ u1, succ u1} A (Additive.{u1} A)) => A -> (Additive.{u1} A)) (Equiv.hasCoeToFun.{succ u1, succ u1} A (Additive.{u1} A)) (Additive.ofMul.{u1} A)) S))
 but is expected to have type
   forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A] (S : Set.{u1} (Multiplicative.{u1} A)), Eq.{succ u1} (AddSubmonoid.{u1} A _inst_4) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (fun (_x : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => AddSubmonoid.{u1} A _inst_4) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.instRelHomClassRelIso.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298))) (Submonoid.toAddSubmonoid'.{u1} A _inst_4) (Submonoid.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4) S)) (AddSubmonoid.closure.{u1} A _inst_4 (Set.preimage.{u1, u1} A (Additive.{u1} A) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} A (Additive.{u1} A)) A (fun (_x : A) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : A) => Additive.{u1} A) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} A (Additive.{u1} A)) (Additive.ofMul.{u1} A)) S))
 Case conversion may be inaccurate. Consider using '#align submonoid.to_add_submonoid'_closure Submonoid.toAddSubmonoid'_closureₓ'. -/
@@ -376,7 +376,7 @@ theorem mem_map_iff_mem {f : F} (hf : Function.Injective f) {S : Submonoid M} {x
 
 /- warning: submonoid.map_le_iff_le_comap -> Submonoid.map_le_iff_le_comap 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F} {S : Submonoid.{u1} M _inst_1} {T : Submonoid.{u2} N _inst_2}, Iff (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toLE.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) T) (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F} {S : Submonoid.{u1} M _inst_1} {T : Submonoid.{u2} N _inst_2}, Iff (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) T) (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))
 but is expected to have type
   forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F} {S : Submonoid.{u3} M _inst_1} {T : Submonoid.{u2} N _inst_2}, Iff (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toLE.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2))))) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S) T) (LE.le.{u3} (Submonoid.{u3} M _inst_1) (Preorder.toLE.{u3} (Submonoid.{u3} M _inst_1) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1))))) S (Submonoid.comap.{u3, u2, u1} M N _inst_1 _inst_2 F mc f T))
 Case conversion may be inaccurate. Consider using '#align submonoid.map_le_iff_le_comap Submonoid.map_le_iff_le_comapₓ'. -/
@@ -400,7 +400,7 @@ theorem gc_map_comap (f : F) : GaloisConnection (map f) (comap f) := fun S T =>
 
 /- warning: submonoid.map_le_of_le_comap -> Submonoid.map_le_of_le_comap 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] (S : Submonoid.{u1} M _inst_1) {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {T : Submonoid.{u2} N _inst_2} {f : F}, (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T)) -> (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toLE.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) T)
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (S : Submonoid.{u1} M _inst_1) {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {T : Submonoid.{u2} N _inst_2} {f : F}, (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T)) -> (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) T)
 but is expected to have type
   forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] (S : Submonoid.{u2} M _inst_1) {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {T : Submonoid.{u3} N _inst_2} {f : F}, (LE.le.{u2} (Submonoid.{u2} M _inst_1) (Preorder.toLE.{u2} (Submonoid.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1))))) S (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f T)) -> (LE.le.{u3} (Submonoid.{u3} N _inst_2) (Preorder.toLE.{u3} (Submonoid.{u3} N _inst_2) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2))))) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S) T)
 Case conversion may be inaccurate. Consider using '#align submonoid.map_le_of_le_comap Submonoid.map_le_of_le_comapₓ'. -/
@@ -412,7 +412,7 @@ theorem map_le_of_le_comap {T : Submonoid N} {f : F} : S ≤ T.comap f → S.map
 
 /- warning: submonoid.le_comap_of_map_le -> Submonoid.le_comap_of_map_le 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] (S : Submonoid.{u1} M _inst_1) {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {T : Submonoid.{u2} N _inst_2} {f : F}, (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toLE.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) T) -> (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (S : Submonoid.{u1} M _inst_1) {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {T : Submonoid.{u2} N _inst_2} {f : F}, (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) T) -> (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))
 but is expected to have type
   forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] (S : Submonoid.{u2} M _inst_1) {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {T : Submonoid.{u3} N _inst_2} {f : F}, (LE.le.{u3} (Submonoid.{u3} N _inst_2) (Preorder.toLE.{u3} (Submonoid.{u3} N _inst_2) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2))))) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S) T) -> (LE.le.{u2} (Submonoid.{u2} M _inst_1) (Preorder.toLE.{u2} (Submonoid.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1))))) S (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f T))
 Case conversion may be inaccurate. Consider using '#align submonoid.le_comap_of_map_le Submonoid.le_comap_of_map_leₓ'. -/
@@ -424,7 +424,7 @@ theorem le_comap_of_map_le {T : Submonoid N} {f : F} : S.map f ≤ T → S ≤ T
 
 /- warning: submonoid.le_comap_map -> Submonoid.le_comap_map 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] (S : Submonoid.{u1} M _inst_1) {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (S : Submonoid.{u1} M _inst_1) {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S))
 but is expected to have type
   forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] (S : Submonoid.{u3} M _inst_1) {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, LE.le.{u3} (Submonoid.{u3} M _inst_1) (Preorder.toLE.{u3} (Submonoid.{u3} M _inst_1) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1))))) S (Submonoid.comap.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S))
 Case conversion may be inaccurate. Consider using '#align submonoid.le_comap_map Submonoid.le_comap_mapₓ'. -/
@@ -436,7 +436,7 @@ theorem le_comap_map {f : F} : S ≤ (S.map f).comap f :=
 
 /- warning: submonoid.map_comap_le -> Submonoid.map_comap_le 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {S : Submonoid.{u2} N _inst_2} {f : F}, LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toLE.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)) S
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {S : Submonoid.{u2} N _inst_2} {f : F}, LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)) S
 but is expected to have type
   forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {S : Submonoid.{u3} N _inst_2} {f : F}, LE.le.{u3} (Submonoid.{u3} N _inst_2) (Preorder.toLE.{u3} (Submonoid.{u3} N _inst_2) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2))))) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S)) S
 Case conversion may be inaccurate. Consider using '#align submonoid.map_comap_le Submonoid.map_comap_leₓ'. -/
@@ -682,7 +682,7 @@ theorem comap_iSup_map_of_injective (S : ι → Submonoid M) : (⨆ i, (S i).map
 
 /- warning: submonoid.map_le_map_iff_of_injective -> Submonoid.map_le_map_iff_of_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] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (forall {S : Submonoid.{u1} M _inst_1} {T : Submonoid.{u1} M _inst_1}, Iff (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toLE.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T)) (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S T))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (forall {S : Submonoid.{u1} M _inst_1} {T : Submonoid.{u1} M _inst_1}, Iff (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T)) (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S T))
 but is expected to have type
   forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall {S : Submonoid.{u3} M _inst_1} {T : Submonoid.{u3} M _inst_1}, Iff (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toLE.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2))))) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f T)) (LE.le.{u3} (Submonoid.{u3} M _inst_1) (Preorder.toLE.{u3} (Submonoid.{u3} M _inst_1) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1))))) S T))
 Case conversion may be inaccurate. Consider using '#align submonoid.map_le_map_iff_of_injective Submonoid.map_le_map_iff_of_injectiveₓ'. -/
@@ -813,7 +813,7 @@ theorem map_iSup_comap_of_surjective (S : ι → Submonoid N) : (⨆ i, (S i).co
 
 /- warning: submonoid.comap_le_comap_iff_of_surjective -> Submonoid.comap_le_comap_iff_of_surjective 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (forall {S : Submonoid.{u2} N _inst_2} {T : Submonoid.{u2} N _inst_2}, Iff (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T)) (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toLE.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) S T))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (forall {S : Submonoid.{u2} N _inst_2} {T : Submonoid.{u2} N _inst_2}, Iff (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T)) (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) S T))
 but is expected to have type
   forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall {S : Submonoid.{u3} N _inst_2} {T : Submonoid.{u3} N _inst_2}, Iff (LE.le.{u2} (Submonoid.{u2} M _inst_1) (Preorder.toLE.{u2} (Submonoid.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1))))) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f T)) (LE.le.{u3} (Submonoid.{u3} N _inst_2) (Preorder.toLE.{u3} (Submonoid.{u3} N _inst_2) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2))))) S T))
 Case conversion may be inaccurate. Consider using '#align submonoid.comap_le_comap_iff_of_surjective Submonoid.comap_le_comap_iff_of_surjectiveₓ'. -/
@@ -1405,7 +1405,7 @@ theorem mem_prod {s : Submonoid M} {t : Submonoid N} {p : M × N} :
 
 /- warning: submonoid.prod_mono -> Submonoid.prod_mono 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] {s₁ : Submonoid.{u1} M _inst_1} {s₂ : Submonoid.{u1} M _inst_1} {t₁ : Submonoid.{u2} N _inst_2} {t₂ : Submonoid.{u2} N _inst_2}, (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) s₁ s₂) -> (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toLE.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) t₁ t₂) -> (LE.le.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Preorder.toLE.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (SetLike.partialOrder.{max u1 u2, max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Prod.{u1, u2} M N) (Submonoid.setLike.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2))))) (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 s₁ t₁) (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 s₂ t₂))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {s₁ : Submonoid.{u1} M _inst_1} {s₂ : Submonoid.{u1} M _inst_1} {t₁ : Submonoid.{u2} N _inst_2} {t₂ : Submonoid.{u2} N _inst_2}, (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) s₁ s₂) -> (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) t₁ t₂) -> (LE.le.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Preorder.toHasLe.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (SetLike.partialOrder.{max u1 u2, max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Prod.{u1, u2} M N) (Submonoid.setLike.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2))))) (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 s₁ t₁) (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 s₂ t₂))
 but is expected to have type
   forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {s₁ : Submonoid.{u2} M _inst_1} {s₂ : Submonoid.{u2} M _inst_1} {t₁ : Submonoid.{u1} N _inst_2} {t₂ : Submonoid.{u1} N _inst_2}, (LE.le.{u2} (Submonoid.{u2} M _inst_1) (Preorder.toLE.{u2} (Submonoid.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1))))) s₁ s₂) -> (LE.le.{u1} (Submonoid.{u1} N _inst_2) (Preorder.toLE.{u1} (Submonoid.{u1} N _inst_2) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u1} N _inst_2))))) t₁ t₂) -> (LE.le.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Preorder.toLE.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (CompleteSemilatticeInf.toPartialOrder.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (CompleteLattice.toCompleteSemilatticeInf.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Submonoid.instCompleteLatticeSubmonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)))))) (Submonoid.prod.{u2, u1} M N _inst_1 _inst_2 s₁ t₁) (Submonoid.prod.{u2, u1} M N _inst_1 _inst_2 s₂ t₂))
 Case conversion may be inaccurate. Consider using '#align submonoid.prod_mono Submonoid.prod_monoₓ'. -/
@@ -1577,7 +1577,7 @@ theorem map_equiv_top (f : M ≃* N) : (⊤ : Submonoid M).map f.toMonoidHom = 
 
 /- warning: submonoid.le_prod_iff -> Submonoid.le_prod_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] {s : Submonoid.{u1} M _inst_1} {t : Submonoid.{u2} N _inst_2} {u : Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)}, Iff (LE.le.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Preorder.toLE.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (SetLike.partialOrder.{max u1 u2, max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Prod.{u1, u2} M N) (Submonoid.setLike.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2))))) u (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 s t)) (And (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) (Submonoid.map.{max u1 u2, u1, max u1 u2} (Prod.{u1, u2} M N) M (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_1 (MonoidHom.{max u1 u2, u1} (Prod.{u1, u2} M N) M (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_1) (MonoidHom.monoidHomClass.{max u1 u2, u1} (Prod.{u1, u2} M N) M (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_1) (MonoidHom.fst.{u1, u2} M N _inst_1 _inst_2) u) s) (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toLE.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) (Submonoid.map.{max u1 u2, u2, max u1 u2} (Prod.{u1, u2} M N) N (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_2 (MonoidHom.{max u1 u2, u2} (Prod.{u1, u2} M N) N (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_2) (MonoidHom.monoidHomClass.{max u1 u2, u2} (Prod.{u1, u2} M N) N (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_2) (MonoidHom.snd.{u1, u2} M N _inst_1 _inst_2) u) t))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {s : Submonoid.{u1} M _inst_1} {t : Submonoid.{u2} N _inst_2} {u : Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)}, Iff (LE.le.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Preorder.toHasLe.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (SetLike.partialOrder.{max u1 u2, max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Prod.{u1, u2} M N) (Submonoid.setLike.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2))))) u (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 s t)) (And (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) (Submonoid.map.{max u1 u2, u1, max u1 u2} (Prod.{u1, u2} M N) M (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_1 (MonoidHom.{max u1 u2, u1} (Prod.{u1, u2} M N) M (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_1) (MonoidHom.monoidHomClass.{max u1 u2, u1} (Prod.{u1, u2} M N) M (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_1) (MonoidHom.fst.{u1, u2} M N _inst_1 _inst_2) u) s) (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) (Submonoid.map.{max u1 u2, u2, max u1 u2} (Prod.{u1, u2} M N) N (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_2 (MonoidHom.{max u1 u2, u2} (Prod.{u1, u2} M N) N (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_2) (MonoidHom.monoidHomClass.{max u1 u2, u2} (Prod.{u1, u2} M N) N (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) _inst_2) (MonoidHom.snd.{u1, u2} M N _inst_1 _inst_2) u) t))
 but is expected to have type
   forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {s : Submonoid.{u2} M _inst_1} {t : Submonoid.{u1} N _inst_2} {u : Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)}, Iff (LE.le.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Preorder.toLE.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (CompleteSemilatticeInf.toPartialOrder.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (CompleteLattice.toCompleteSemilatticeInf.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Submonoid.instCompleteLatticeSubmonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)))))) u (Submonoid.prod.{u2, u1} M N _inst_1 _inst_2 s t)) (And (LE.le.{u2} (Submonoid.{u2} M _inst_1) (Preorder.toLE.{u2} (Submonoid.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1))))) (Submonoid.map.{max u2 u1, u2, max u2 u1} (Prod.{u2, u1} M N) M (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) _inst_1 (MonoidHom.{max u1 u2, u2} (Prod.{u2, u1} M N) M (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) _inst_1) (MonoidHom.monoidHomClass.{max u2 u1, u2} (Prod.{u2, u1} M N) M (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) _inst_1) (MonoidHom.fst.{u2, u1} M N _inst_1 _inst_2) u) s) (LE.le.{u1} (Submonoid.{u1} N _inst_2) (Preorder.toLE.{u1} (Submonoid.{u1} N _inst_2) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u1} N _inst_2))))) (Submonoid.map.{max u2 u1, u1, max u2 u1} (Prod.{u2, u1} M N) N (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) _inst_2 (MonoidHom.{max u1 u2, u1} (Prod.{u2, u1} M N) N (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) _inst_2) (MonoidHom.monoidHomClass.{max u2 u1, u1} (Prod.{u2, u1} M N) N (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) _inst_2) (MonoidHom.snd.{u2, u1} M N _inst_1 _inst_2) u) t))
 Case conversion may be inaccurate. Consider using '#align submonoid.le_prod_iff Submonoid.le_prod_iffₓ'. -/
@@ -1599,7 +1599,7 @@ theorem le_prod_iff {s : Submonoid M} {t : Submonoid N} {u : Submonoid (M × N)}
 
 /- warning: submonoid.prod_le_iff -> Submonoid.prod_le_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] {s : Submonoid.{u1} M _inst_1} {t : Submonoid.{u2} N _inst_2} {u : Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)}, Iff (LE.le.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Preorder.toLE.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (SetLike.partialOrder.{max u1 u2, max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Prod.{u1, u2} M N) (Submonoid.setLike.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2))))) (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 s t) u) (And (LE.le.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Preorder.toLE.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (SetLike.partialOrder.{max u1 u2, max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Prod.{u1, u2} M N) (Submonoid.setLike.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2))))) (Submonoid.map.{u1, max u1 u2, max u1 u2} M (Prod.{u1, u2} M N) _inst_1 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.{u1, max u1 u2} M (Prod.{u1, u2} M N) _inst_1 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u1, max u1 u2} M (Prod.{u1, u2} M N) _inst_1 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.inl.{u1, u2} M N _inst_1 _inst_2) s) u) (LE.le.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Preorder.toLE.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (SetLike.partialOrder.{max u1 u2, max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Prod.{u1, u2} M N) (Submonoid.setLike.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2))))) (Submonoid.map.{u2, max u1 u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.{u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.inr.{u1, u2} M N _inst_1 _inst_2) t) u))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {s : Submonoid.{u1} M _inst_1} {t : Submonoid.{u2} N _inst_2} {u : Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)}, Iff (LE.le.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Preorder.toHasLe.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (SetLike.partialOrder.{max u1 u2, max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Prod.{u1, u2} M N) (Submonoid.setLike.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2))))) (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 s t) u) (And (LE.le.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Preorder.toHasLe.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (SetLike.partialOrder.{max u1 u2, max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Prod.{u1, u2} M N) (Submonoid.setLike.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2))))) (Submonoid.map.{u1, max u1 u2, max u1 u2} M (Prod.{u1, u2} M N) _inst_1 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.{u1, max u1 u2} M (Prod.{u1, u2} M N) _inst_1 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u1, max u1 u2} M (Prod.{u1, u2} M N) _inst_1 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.inl.{u1, u2} M N _inst_1 _inst_2) s) u) (LE.le.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Preorder.toHasLe.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (SetLike.partialOrder.{max u1 u2, max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Prod.{u1, u2} M N) (Submonoid.setLike.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2))))) (Submonoid.map.{u2, max u1 u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.{u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.inr.{u1, u2} M N _inst_1 _inst_2) t) u))
 but is expected to have type
   forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {s : Submonoid.{u2} M _inst_1} {t : Submonoid.{u1} N _inst_2} {u : Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)}, Iff (LE.le.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Preorder.toLE.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (CompleteSemilatticeInf.toPartialOrder.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (CompleteLattice.toCompleteSemilatticeInf.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Submonoid.instCompleteLatticeSubmonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)))))) (Submonoid.prod.{u2, u1} M N _inst_1 _inst_2 s t) u) (And (LE.le.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Preorder.toLE.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (CompleteSemilatticeInf.toPartialOrder.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (CompleteLattice.toCompleteSemilatticeInf.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Submonoid.instCompleteLatticeSubmonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)))))) (Submonoid.map.{u2, max u2 u1, max u2 u1} M (Prod.{u2, u1} M N) _inst_1 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.{u2, max u1 u2} M (Prod.{u2, u1} M N) _inst_1 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u2, max u2 u1} M (Prod.{u2, u1} M N) _inst_1 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.inl.{u2, u1} M N _inst_1 _inst_2) s) u) (LE.le.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Preorder.toLE.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (CompleteSemilatticeInf.toPartialOrder.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (CompleteLattice.toCompleteSemilatticeInf.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Submonoid.instCompleteLatticeSubmonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)))))) (Submonoid.map.{u1, max u2 u1, max u2 u1} N (Prod.{u2, u1} M N) _inst_2 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.{u1, max u1 u2} N (Prod.{u2, u1} M N) _inst_2 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u1, max u2 u1} N (Prod.{u2, u1} M N) _inst_2 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.inr.{u2, u1} M N _inst_1 _inst_2) t) u))
 Case conversion may be inaccurate. Consider using '#align submonoid.prod_le_iff Submonoid.prod_le_iffₓ'. -/
@@ -1758,7 +1758,7 @@ theorem mrange_top_of_surjective (f : F) (hf : Function.Surjective f) :
 
 /- warning: monoid_hom.mclosure_preimage_le -> MonoidHom.mclosure_preimage_le 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F) (s : Set.{u2} N), LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) (Submonoid.closure.{u1} M _inst_1 (Set.preimage.{u1, 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) (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 mc))) f) s)) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Submonoid.closure.{u2} N _inst_2 s))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F) (s : Set.{u2} N), LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) (Submonoid.closure.{u1} M _inst_1 (Set.preimage.{u1, 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) (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 mc))) f) s)) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Submonoid.closure.{u2} N _inst_2 s))
 but is expected to have type
   forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] (f : F) (s : Set.{u3} N), LE.le.{u2} (Submonoid.{u2} M _inst_1) (Preorder.toLE.{u2} (Submonoid.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1))))) (Submonoid.closure.{u2} M _inst_1 (Set.preimage.{u2, u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f) s)) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Submonoid.closure.{u3} N _inst_2 s))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.mclosure_preimage_le MonoidHom.mclosure_preimage_leₓ'. -/
@@ -2216,7 +2216,7 @@ theorem mrange_inl_sup_mrange_inr : (inl M N).mrange ⊔ (inr M N).mrange = ⊤
 
 /- warning: submonoid.inclusion -> Submonoid.inclusion is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {S : Submonoid.{u1} M _inst_1} {T : Submonoid.{u1} M _inst_1}, (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S T) -> (MonoidHom.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) T) (Submonoid.toMulOneClass.{u1} M _inst_1 S) (Submonoid.toMulOneClass.{u1} M _inst_1 T))
+  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {S : Submonoid.{u1} M _inst_1} {T : Submonoid.{u1} M _inst_1}, (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S T) -> (MonoidHom.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) T) (Submonoid.toMulOneClass.{u1} M _inst_1 S) (Submonoid.toMulOneClass.{u1} M _inst_1 T))
 but is expected to have type
   forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {S : Submonoid.{u1} M _inst_1} {T : Submonoid.{u1} M _inst_1}, (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) S T) -> (MonoidHom.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x T)) (Submonoid.toMulOneClass.{u1} M _inst_1 S) (Submonoid.toMulOneClass.{u1} M _inst_1 T))
 Case conversion may be inaccurate. Consider using '#align submonoid.inclusion Submonoid.inclusionₓ'. -/
Diff
@@ -1331,7 +1331,7 @@ noncomputable def equivMapOfInjective (f : M →* N) (hf : Function.Injective f)
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (S : Submonoid.{u1} M _inst_1) (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2) (hf : Function.Injective.{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)) (x : coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S), Eq.{succ u2} N ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)))))) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MulEquiv.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S))) (fun (_x : MulEquiv.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S))) => (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) -> (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S))) (MulEquiv.hasCoeToFun.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S))) (Submonoid.equivMapOfInjective.{u1, u2} M N _inst_1 _inst_2 S f hf) 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 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S))))) x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (S : Submonoid.{u2} M _inst_1) (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2) (hf : Function.Injective.{succ u2, succ u1} M N (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 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)), Eq.{succ u1} N (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (MulOneClass.toMul.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u2} M _inst_1 S)) (MulOneClass.toMul.{u1} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.toMulOneClass.{u2} M _inst_1 S) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S)) (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.toMulOneClass.{u2} M _inst_1 S) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S)) (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S)))))) (Submonoid.equivMapOfInjective.{u2, u1} M N _inst_1 _inst_2 S f hf) 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 (Subtype.val.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Set.{u2} M) (Set.instMembershipSet.{u2} M) x (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) x))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (S : Submonoid.{u2} M _inst_1) (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2) (hf : Function.Injective.{succ u2, succ u1} M N (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 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)), Eq.{succ u1} N (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) _x) (EmbeddingLike.toFunLike.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (EquivLike.toEmbeddingLike.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (MulEquivClass.toEquivLike.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S)) (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S)))))) (Submonoid.equivMapOfInjective.{u2, u1} M N _inst_1 _inst_2 S f hf) 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 (Subtype.val.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Set.{u2} M) (Set.instMembershipSet.{u2} M) x (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) x))
 Case conversion may be inaccurate. Consider using '#align submonoid.coe_equiv_map_of_injective_apply Submonoid.coe_equivMapOfInjective_applyₓ'. -/
 @[simp, to_additive]
 theorem coe_equivMapOfInjective_apply (f : M →* N) (hf : Function.Injective f) (x : S) :
@@ -1528,7 +1528,7 @@ theorem prod_bot_sup_bot_prod (s : Submonoid M) (t : Submonoid N) :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {f : MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)} {K : Submonoid.{u1} M _inst_1} {x : N}, Iff (Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 f) K)) (Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (fun (_x : MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) => N -> M) (MulEquiv.hasCoeToFun.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (MulEquiv.symm.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) f) x) K)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {f : MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)} {K : Submonoid.{u2} M _inst_1} {x : N}, Iff (Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 f) K)) (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : N) => M) x) (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : N) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) f) x) K)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {f : MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)} {K : Submonoid.{u2} M _inst_1} {x : N}, Iff (Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 f) K)) (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : N) => M) x) (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : N) => M) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (EquivLike.toEmbeddingLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulEquivClass.toEquivLike.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) f) x) K)
 Case conversion may be inaccurate. Consider using '#align submonoid.mem_map_equiv Submonoid.mem_map_equivₓ'. -/
 @[to_additive]
 theorem mem_map_equiv {f : M ≃* N} {K : Submonoid M} {x : N} :
@@ -2373,7 +2373,7 @@ def submonoidMap (e : M ≃* N) (S : Submonoid M) : S ≃* S.map e.toMonoidHom :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (e : MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (S : Submonoid.{u1} M _inst_1) (g : coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S), Eq.{succ u2} N ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)))))) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MulEquiv.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S))) (fun (_x : MulEquiv.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S))) => (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) -> (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S))) (MulEquiv.hasCoeToFun.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S))) (MulEquiv.submonoidMap.{u1, u2} M N _inst_1 _inst_2 e S) g)) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (fun (_x : MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) => M -> N) (MulEquiv.hasCoeToFun.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) e ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S))))) g))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (e : MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) (S : Submonoid.{u2} M _inst_1) (g : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)), Eq.{succ u1} N (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (MulOneClass.toMul.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u2} M _inst_1 S)) (MulOneClass.toMul.{u1} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.toMulOneClass.{u2} M _inst_1 S) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.toMulOneClass.{u2} M _inst_1 S) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)))))) (MulEquiv.submonoidMap.{u2, u1} M N _inst_1 _inst_2 e S) g)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{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} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))))) e (Subtype.val.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Set.{u2} M) (Set.instMembershipSet.{u2} M) x (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) g))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (e : MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) (S : Submonoid.{u2} M _inst_1) (g : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)), Eq.{succ u1} N (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) _x) (EmbeddingLike.toFunLike.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (EquivLike.toEmbeddingLike.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (MulEquivClass.toEquivLike.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)))))) (MulEquiv.submonoidMap.{u2, u1} M N _inst_1 _inst_2 e S) g)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : M) => N) _x) (EmbeddingLike.toFunLike.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N (EquivLike.toEmbeddingLike.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N (MulEquivClass.toEquivLike.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))))) e (Subtype.val.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Set.{u2} M) (Set.instMembershipSet.{u2} M) x (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) g))
 Case conversion may be inaccurate. Consider using '#align mul_equiv.coe_submonoid_map_apply MulEquiv.coe_submonoidMap_applyₓ'. -/
 @[simp, to_additive]
 theorem coe_submonoidMap_apply (e : M ≃* N) (S : Submonoid M) (g : S) :
@@ -2386,7 +2386,7 @@ theorem coe_submonoidMap_apply (e : M ≃* N) (S : Submonoid M) (g : S) :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (e : MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (S : Submonoid.{u1} M _inst_1) (g : coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)), Eq.{succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S)) (fun (_x : MulEquiv.{u2, u1} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S)) => (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) -> (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S)) (MulEquiv.hasCoeToFun.{u2, u1} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S)) (MulEquiv.symm.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (MulEquiv.submonoidMap.{u1, u2} M N _inst_1 _inst_2 e S)) g) (Subtype.mk.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (fun (_x : MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) => N -> M) (MulEquiv.hasCoeToFun.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (MulEquiv.symm.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g)) (Iff.mp (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (fun (_x : MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) => N -> M) (MulEquiv.hasCoeToFun.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (MulEquiv.symm.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S)) (Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (fun (_x : MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) => N -> M) (MulEquiv.hasCoeToFun.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (MulEquiv.symm.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g)) S) (SetLike.mem_coe.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1) S (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (fun (_x : MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) => N -> M) (MulEquiv.hasCoeToFun.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (MulEquiv.symm.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g))) (Iff.mp (Membership.Mem.{u2, u2} N (Set.{u2} N) (Set.hasMem.{u2} N) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g) (Set.image.{u1, u2} M N (coeFn.{max 1 (max (succ u1) (succ u2)) (succ u2) (succ u1), max (succ u1) (succ u2)} (Equiv.{succ u1, succ u2} M N) (fun (_x : Equiv.{succ u1, succ u2} M N) => M -> N) (Equiv.hasCoeToFun.{succ u1, succ u2} M N) (MulEquiv.toEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S))) (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} N M) (fun (_x : Equiv.{succ u2, succ u1} N M) => N -> M) (Equiv.hasCoeToFun.{succ u2, succ u1} N M) (Equiv.symm.{succ u1, succ u2} M N (MulEquiv.toEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e)) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S)) (Set.mem_image_equiv.{u1, u2} M N ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S) (MulEquiv.toEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g)) (Subtype.property.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) g))))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (e : MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) (S : Submonoid.{u2} M _inst_1) (g : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) => Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) g) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (fun (_x : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) => Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (MulOneClass.toMul.{u1} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (MulOneClass.toMul.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u2} M _inst_1 S)) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.toMulOneClass.{u2} M _inst_1 S) (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.toMulOneClass.{u2} M _inst_1 S) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S))))) (MulEquiv.symm.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (MulEquiv.submonoidMap.{u2, u1} M N _inst_1 _inst_2 e S)) g) (Subtype.mk.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : N) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (Iff.mp (Membership.mem.{u2, u2} M (Set.{u2} M) (Set.instMembershipSet.{u2} M) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : N) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) (Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : N) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) S) (SetLike.mem_coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : N) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g))) (Iff.mp (Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g) (Set.image.{u2, u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (Equiv.{succ u2, succ u1} M N) M (fun (_x : M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : M) => N) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} M N) (MulEquiv.toEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e)) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S))) (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : N) => M) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (Set.{u2} M) (Set.instMembershipSet.{u2} M) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (Equiv.{succ u1, succ u2} N M) N (fun (_x : N) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : N) => M) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u2} N M) (Equiv.symm.{succ u2, succ u1} M N (MulEquiv.toEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e)) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) (Set.mem_image_equiv.{u1, u2} M N (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S) (MulEquiv.toEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (Subtype.property.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S)) g))))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (e : MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) (S : Submonoid.{u2} M _inst_1) (g : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))), Eq.{succ u2} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) => Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) g) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (fun (_x : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) => Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (EquivLike.toEmbeddingLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (MulEquivClass.toEquivLike.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S))))) (MulEquiv.symm.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (MulEquiv.submonoidMap.{u2, u1} M N _inst_1 _inst_2 e S)) g) (Subtype.mk.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : N) => M) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (EquivLike.toEmbeddingLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulEquivClass.toEquivLike.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (Iff.mp (Membership.mem.{u2, u2} M (Set.{u2} M) (Set.instMembershipSet.{u2} M) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : N) => M) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (EquivLike.toEmbeddingLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulEquivClass.toEquivLike.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) (Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : N) => M) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (EquivLike.toEmbeddingLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulEquivClass.toEquivLike.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) S) (SetLike.mem_coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : N) => M) _x) (EmbeddingLike.toFunLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (EquivLike.toEmbeddingLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulEquivClass.toEquivLike.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g))) (Iff.mp (Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g) (Set.image.{u2, u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (Equiv.{succ u2, succ u1} M N) M (fun (_x : M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : M) => N) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} M N) (MulEquiv.toEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e)) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S))) (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : N) => M) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (Set.{u2} M) (Set.instMembershipSet.{u2} M) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (Equiv.{succ u1, succ u2} N M) N (fun (_x : N) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : N) => M) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u2} N M) (Equiv.symm.{succ u2, succ u1} M N (MulEquiv.toEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e)) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) (Set.mem_image_equiv.{u1, u2} M N (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S) (MulEquiv.toEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (Subtype.property.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S)) g))))
 Case conversion may be inaccurate. Consider using '#align mul_equiv.submonoid_map_symm_apply MulEquiv.submonoidMap_symm_applyₓ'. -/
 @[simp, to_additive AddEquiv.add_submonoid_map_symm_apply]
 theorem submonoidMap_symm_apply (e : M ≃* N) (S : Submonoid M) (g : S.map (e : M →* N)) :
Diff
@@ -506,17 +506,17 @@ theorem map_sup (S T : Submonoid M) (f : F) : (S ⊔ T).map f = S.map f ⊔ T.ma
 #align submonoid.map_sup Submonoid.map_sup
 #align add_submonoid.map_sup AddSubmonoid.map_sup
 
-/- warning: submonoid.map_supr -> Submonoid.map_supᵢ is a dubious translation:
+/- warning: submonoid.map_supr -> Submonoid.map_iSup 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {ι : Sort.{u4}} (f : F) (s : ι -> (Submonoid.{u1} M _inst_1)), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (supᵢ.{u1, u4} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.completeLattice.{u1} M _inst_1))) ι s)) (supᵢ.{u2, u4} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeSup.toHasSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.completeLattice.{u2} N _inst_2))) ι (fun (i : ι) => Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (s i)))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {ι : Sort.{u4}} (f : F) (s : ι -> (Submonoid.{u1} M _inst_1)), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (iSup.{u1, u4} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.completeLattice.{u1} M _inst_1))) ι s)) (iSup.{u2, u4} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeSup.toHasSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.completeLattice.{u2} N _inst_2))) ι (fun (i : ι) => Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (s i)))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {ι : Sort.{u4}} (f : F) (s : ι -> (Submonoid.{u3} M _inst_1)), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (supᵢ.{u3, u4} (Submonoid.{u3} M _inst_1) (CompleteLattice.toSupSet.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1)) ι s)) (supᵢ.{u2, u4} (Submonoid.{u2} N _inst_2) (CompleteLattice.toSupSet.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)) ι (fun (i : ι) => Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (s i)))
-Case conversion may be inaccurate. Consider using '#align submonoid.map_supr Submonoid.map_supᵢₓ'. -/
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {ι : Sort.{u4}} (f : F) (s : ι -> (Submonoid.{u3} M _inst_1)), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (iSup.{u3, u4} (Submonoid.{u3} M _inst_1) (CompleteLattice.toSupSet.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1)) ι s)) (iSup.{u2, u4} (Submonoid.{u2} N _inst_2) (CompleteLattice.toSupSet.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)) ι (fun (i : ι) => Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (s i)))
+Case conversion may be inaccurate. Consider using '#align submonoid.map_supr Submonoid.map_iSupₓ'. -/
 @[to_additive]
-theorem map_supᵢ {ι : Sort _} (f : F) (s : ι → Submonoid M) : (supᵢ s).map f = ⨆ i, (s i).map f :=
-  (gc_map_comap f : GaloisConnection (map f) (comap f)).l_supᵢ
-#align submonoid.map_supr Submonoid.map_supᵢ
-#align add_submonoid.map_supr AddSubmonoid.map_supᵢ
+theorem map_iSup {ι : Sort _} (f : F) (s : ι → Submonoid M) : (iSup s).map f = ⨆ i, (s i).map f :=
+  (gc_map_comap f : GaloisConnection (map f) (comap f)).l_iSup
+#align submonoid.map_supr Submonoid.map_iSup
+#align add_submonoid.map_supr AddSubmonoid.map_iSup
 
 /- warning: submonoid.comap_inf -> Submonoid.comap_inf is a dubious translation:
 lean 3 declaration is
@@ -530,18 +530,18 @@ theorem comap_inf (S T : Submonoid N) (f : F) : (S ⊓ T).comap f = S.comap f 
 #align submonoid.comap_inf Submonoid.comap_inf
 #align add_submonoid.comap_inf AddSubmonoid.comap_inf
 
-/- warning: submonoid.comap_infi -> Submonoid.comap_infᵢ is a dubious translation:
+/- warning: submonoid.comap_infi -> Submonoid.comap_iInf 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {ι : Sort.{u4}} (f : F) (s : ι -> (Submonoid.{u2} N _inst_2)), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (infᵢ.{u2, u4} (Submonoid.{u2} N _inst_2) (Submonoid.hasInf.{u2} N _inst_2) ι s)) (infᵢ.{u1, u4} (Submonoid.{u1} M _inst_1) (Submonoid.hasInf.{u1} M _inst_1) ι (fun (i : ι) => Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (s i)))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {ι : Sort.{u4}} (f : F) (s : ι -> (Submonoid.{u2} N _inst_2)), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (iInf.{u2, u4} (Submonoid.{u2} N _inst_2) (Submonoid.hasInf.{u2} N _inst_2) ι s)) (iInf.{u1, u4} (Submonoid.{u1} M _inst_1) (Submonoid.hasInf.{u1} M _inst_1) ι (fun (i : ι) => Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (s i)))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {ι : Sort.{u4}} (f : F) (s : ι -> (Submonoid.{u3} N _inst_2)), Eq.{succ u2} (Submonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (infᵢ.{u3, u4} (Submonoid.{u3} N _inst_2) (Submonoid.instInfSetSubmonoid.{u3} N _inst_2) ι s)) (infᵢ.{u2, u4} (Submonoid.{u2} M _inst_1) (Submonoid.instInfSetSubmonoid.{u2} M _inst_1) ι (fun (i : ι) => Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (s i)))
-Case conversion may be inaccurate. Consider using '#align submonoid.comap_infi Submonoid.comap_infᵢₓ'. -/
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {ι : Sort.{u4}} (f : F) (s : ι -> (Submonoid.{u3} N _inst_2)), Eq.{succ u2} (Submonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (iInf.{u3, u4} (Submonoid.{u3} N _inst_2) (Submonoid.instInfSetSubmonoid.{u3} N _inst_2) ι s)) (iInf.{u2, u4} (Submonoid.{u2} M _inst_1) (Submonoid.instInfSetSubmonoid.{u2} M _inst_1) ι (fun (i : ι) => Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (s i)))
+Case conversion may be inaccurate. Consider using '#align submonoid.comap_infi Submonoid.comap_iInfₓ'. -/
 @[to_additive]
-theorem comap_infᵢ {ι : Sort _} (f : F) (s : ι → Submonoid N) :
-    (infᵢ s).comap f = ⨅ i, (s i).comap f :=
-  (gc_map_comap f : GaloisConnection (map f) (comap f)).u_infᵢ
-#align submonoid.comap_infi Submonoid.comap_infᵢ
-#align add_submonoid.comap_infi AddSubmonoid.comap_infᵢ
+theorem comap_iInf {ι : Sort _} (f : F) (s : ι → Submonoid N) :
+    (iInf s).comap f = ⨅ i, (s i).comap f :=
+  (gc_map_comap f : GaloisConnection (map f) (comap f)).u_iInf
+#align submonoid.comap_infi Submonoid.comap_iInf
+#align add_submonoid.comap_infi AddSubmonoid.comap_iInf
 
 /- warning: submonoid.map_bot -> Submonoid.map_bot is a dubious translation:
 lean 3 declaration is
@@ -644,17 +644,17 @@ theorem comap_inf_map_of_injective (S T : Submonoid M) : (S.map f ⊓ T.map f).c
 #align submonoid.comap_inf_map_of_injective Submonoid.comap_inf_map_of_injective
 #align add_submonoid.comap_inf_map_of_injective AddSubmonoid.comap_inf_map_of_injective
 
-/- warning: submonoid.comap_infi_map_of_injective -> Submonoid.comap_infᵢ_map_of_injective is a dubious translation:
+/- warning: submonoid.comap_infi_map_of_injective -> Submonoid.comap_iInf_map_of_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] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {ι : Type.{u4}} {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) (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 mc))) f)) -> (forall (S : ι -> (Submonoid.{u1} M _inst_1)), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (infᵢ.{u2, succ u4} (Submonoid.{u2} N _inst_2) (Submonoid.hasInf.{u2} N _inst_2) ι (fun (i : ι) => Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (S i)))) (infᵢ.{u1, succ u4} (Submonoid.{u1} M _inst_1) (Submonoid.hasInf.{u1} M _inst_1) ι S))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {ι : Type.{u4}} {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) (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 mc))) f)) -> (forall (S : ι -> (Submonoid.{u1} M _inst_1)), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (iInf.{u2, succ u4} (Submonoid.{u2} N _inst_2) (Submonoid.hasInf.{u2} N _inst_2) ι (fun (i : ι) => Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (S i)))) (iInf.{u1, succ u4} (Submonoid.{u1} M _inst_1) (Submonoid.hasInf.{u1} M _inst_1) ι S))
 but is expected to have type
-  forall {M : Type.{u4}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u4} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u4, u3} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Injective.{succ u4, succ u3} M N (FunLike.coe.{succ u2, succ u4, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u2, u4, u3} F M N (MulOneClass.toMul.{u4} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u4, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} M _inst_1)), Eq.{succ u4} (Submonoid.{u4} M _inst_1) (Submonoid.comap.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (infᵢ.{u3, succ u1} (Submonoid.{u3} N _inst_2) (Submonoid.instInfSetSubmonoid.{u3} N _inst_2) ι (fun (i : ι) => Submonoid.map.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (S i)))) (infᵢ.{u4, succ u1} (Submonoid.{u4} M _inst_1) (Submonoid.instInfSetSubmonoid.{u4} M _inst_1) ι S))
-Case conversion may be inaccurate. Consider using '#align submonoid.comap_infi_map_of_injective Submonoid.comap_infᵢ_map_of_injectiveₓ'. -/
+  forall {M : Type.{u4}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u4} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u4, u3} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Injective.{succ u4, succ u3} M N (FunLike.coe.{succ u2, succ u4, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u2, u4, u3} F M N (MulOneClass.toMul.{u4} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u4, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} M _inst_1)), Eq.{succ u4} (Submonoid.{u4} M _inst_1) (Submonoid.comap.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (iInf.{u3, succ u1} (Submonoid.{u3} N _inst_2) (Submonoid.instInfSetSubmonoid.{u3} N _inst_2) ι (fun (i : ι) => Submonoid.map.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (S i)))) (iInf.{u4, succ u1} (Submonoid.{u4} M _inst_1) (Submonoid.instInfSetSubmonoid.{u4} M _inst_1) ι S))
+Case conversion may be inaccurate. Consider using '#align submonoid.comap_infi_map_of_injective Submonoid.comap_iInf_map_of_injectiveₓ'. -/
 @[to_additive]
-theorem comap_infᵢ_map_of_injective (S : ι → Submonoid M) : (⨅ i, (S i).map f).comap f = infᵢ S :=
-  (gciMapComap hf).u_infᵢ_l _
-#align submonoid.comap_infi_map_of_injective Submonoid.comap_infᵢ_map_of_injective
-#align add_submonoid.comap_infi_map_of_injective AddSubmonoid.comap_infᵢ_map_of_injective
+theorem comap_iInf_map_of_injective (S : ι → Submonoid M) : (⨅ i, (S i).map f).comap f = iInf S :=
+  (gciMapComap hf).u_iInf_l _
+#align submonoid.comap_infi_map_of_injective Submonoid.comap_iInf_map_of_injective
+#align add_submonoid.comap_infi_map_of_injective AddSubmonoid.comap_iInf_map_of_injective
 
 /- warning: submonoid.comap_sup_map_of_injective -> Submonoid.comap_sup_map_of_injective is a dubious translation:
 lean 3 declaration is
@@ -668,17 +668,17 @@ theorem comap_sup_map_of_injective (S T : Submonoid M) : (S.map f ⊔ T.map f).c
 #align submonoid.comap_sup_map_of_injective Submonoid.comap_sup_map_of_injective
 #align add_submonoid.comap_sup_map_of_injective AddSubmonoid.comap_sup_map_of_injective
 
-/- warning: submonoid.comap_supr_map_of_injective -> Submonoid.comap_supᵢ_map_of_injective is a dubious translation:
+/- warning: submonoid.comap_supr_map_of_injective -> Submonoid.comap_iSup_map_of_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] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {ι : Type.{u4}} {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) (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 mc))) f)) -> (forall (S : ι -> (Submonoid.{u1} M _inst_1)), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (supᵢ.{u2, succ u4} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeSup.toHasSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.completeLattice.{u2} N _inst_2))) ι (fun (i : ι) => Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (S i)))) (supᵢ.{u1, succ u4} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.completeLattice.{u1} M _inst_1))) ι S))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {ι : Type.{u4}} {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) (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 mc))) f)) -> (forall (S : ι -> (Submonoid.{u1} M _inst_1)), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (iSup.{u2, succ u4} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeSup.toHasSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.completeLattice.{u2} N _inst_2))) ι (fun (i : ι) => Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (S i)))) (iSup.{u1, succ u4} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.completeLattice.{u1} M _inst_1))) ι S))
 but is expected to have type
-  forall {M : Type.{u4}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u4} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u4, u3} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Injective.{succ u4, succ u3} M N (FunLike.coe.{succ u2, succ u4, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u2, u4, u3} F M N (MulOneClass.toMul.{u4} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u4, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} M _inst_1)), Eq.{succ u4} (Submonoid.{u4} M _inst_1) (Submonoid.comap.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (supᵢ.{u3, succ u1} (Submonoid.{u3} N _inst_2) (CompleteLattice.toSupSet.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2)) ι (fun (i : ι) => Submonoid.map.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (S i)))) (supᵢ.{u4, succ u1} (Submonoid.{u4} M _inst_1) (CompleteLattice.toSupSet.{u4} (Submonoid.{u4} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u4} M _inst_1)) ι S))
-Case conversion may be inaccurate. Consider using '#align submonoid.comap_supr_map_of_injective Submonoid.comap_supᵢ_map_of_injectiveₓ'. -/
+  forall {M : Type.{u4}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u4} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u4, u3} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Injective.{succ u4, succ u3} M N (FunLike.coe.{succ u2, succ u4, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u2, u4, u3} F M N (MulOneClass.toMul.{u4} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u4, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} M _inst_1)), Eq.{succ u4} (Submonoid.{u4} M _inst_1) (Submonoid.comap.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (iSup.{u3, succ u1} (Submonoid.{u3} N _inst_2) (CompleteLattice.toSupSet.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2)) ι (fun (i : ι) => Submonoid.map.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (S i)))) (iSup.{u4, succ u1} (Submonoid.{u4} M _inst_1) (CompleteLattice.toSupSet.{u4} (Submonoid.{u4} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u4} M _inst_1)) ι S))
+Case conversion may be inaccurate. Consider using '#align submonoid.comap_supr_map_of_injective Submonoid.comap_iSup_map_of_injectiveₓ'. -/
 @[to_additive]
-theorem comap_supᵢ_map_of_injective (S : ι → Submonoid M) : (⨆ i, (S i).map f).comap f = supᵢ S :=
-  (gciMapComap hf).u_supᵢ_l _
-#align submonoid.comap_supr_map_of_injective Submonoid.comap_supᵢ_map_of_injective
-#align add_submonoid.comap_supr_map_of_injective AddSubmonoid.comap_supᵢ_map_of_injective
+theorem comap_iSup_map_of_injective (S : ι → Submonoid M) : (⨆ i, (S i).map f).comap f = iSup S :=
+  (gciMapComap hf).u_iSup_l _
+#align submonoid.comap_supr_map_of_injective Submonoid.comap_iSup_map_of_injective
+#align add_submonoid.comap_supr_map_of_injective AddSubmonoid.comap_iSup_map_of_injective
 
 /- warning: submonoid.map_le_map_iff_of_injective -> Submonoid.map_le_map_iff_of_injective is a dubious translation:
 lean 3 declaration is
@@ -775,17 +775,17 @@ theorem map_inf_comap_of_surjective (S T : Submonoid N) : (S.comap f ⊓ T.comap
 #align submonoid.map_inf_comap_of_surjective Submonoid.map_inf_comap_of_surjective
 #align add_submonoid.map_inf_comap_of_surjective AddSubmonoid.map_inf_comap_of_surjective
 
-/- warning: submonoid.map_infi_comap_of_surjective -> Submonoid.map_infᵢ_comap_of_surjective is a dubious translation:
+/- warning: submonoid.map_infi_comap_of_surjective -> Submonoid.map_iInf_comap_of_surjective 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {ι : Type.{u4}} {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (forall (S : ι -> (Submonoid.{u2} N _inst_2)), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (infᵢ.{u1, succ u4} (Submonoid.{u1} M _inst_1) (Submonoid.hasInf.{u1} M _inst_1) ι (fun (i : ι) => Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (S i)))) (infᵢ.{u2, succ u4} (Submonoid.{u2} N _inst_2) (Submonoid.hasInf.{u2} N _inst_2) ι S))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {ι : Type.{u4}} {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (forall (S : ι -> (Submonoid.{u2} N _inst_2)), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (iInf.{u1, succ u4} (Submonoid.{u1} M _inst_1) (Submonoid.hasInf.{u1} M _inst_1) ι (fun (i : ι) => Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (S i)))) (iInf.{u2, succ u4} (Submonoid.{u2} N _inst_2) (Submonoid.hasInf.{u2} N _inst_2) ι S))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u4}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u4} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u3, u4} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Surjective.{succ u3, succ u4} M N (FunLike.coe.{succ u2, succ u3, succ u4} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u2, u3, u4} F M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u4} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u3, u4} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} N _inst_2)), Eq.{succ u4} (Submonoid.{u4} N _inst_2) (Submonoid.map.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (infᵢ.{u3, succ u1} (Submonoid.{u3} M _inst_1) (Submonoid.instInfSetSubmonoid.{u3} M _inst_1) ι (fun (i : ι) => Submonoid.comap.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (S i)))) (infᵢ.{u4, succ u1} (Submonoid.{u4} N _inst_2) (Submonoid.instInfSetSubmonoid.{u4} N _inst_2) ι S))
-Case conversion may be inaccurate. Consider using '#align submonoid.map_infi_comap_of_surjective Submonoid.map_infᵢ_comap_of_surjectiveₓ'. -/
+  forall {M : Type.{u3}} {N : Type.{u4}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u4} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u3, u4} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Surjective.{succ u3, succ u4} M N (FunLike.coe.{succ u2, succ u3, succ u4} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u2, u3, u4} F M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u4} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u3, u4} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} N _inst_2)), Eq.{succ u4} (Submonoid.{u4} N _inst_2) (Submonoid.map.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (iInf.{u3, succ u1} (Submonoid.{u3} M _inst_1) (Submonoid.instInfSetSubmonoid.{u3} M _inst_1) ι (fun (i : ι) => Submonoid.comap.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (S i)))) (iInf.{u4, succ u1} (Submonoid.{u4} N _inst_2) (Submonoid.instInfSetSubmonoid.{u4} N _inst_2) ι S))
+Case conversion may be inaccurate. Consider using '#align submonoid.map_infi_comap_of_surjective Submonoid.map_iInf_comap_of_surjectiveₓ'. -/
 @[to_additive]
-theorem map_infᵢ_comap_of_surjective (S : ι → Submonoid N) : (⨅ i, (S i).comap f).map f = infᵢ S :=
-  (giMapComap hf).l_infᵢ_u _
-#align submonoid.map_infi_comap_of_surjective Submonoid.map_infᵢ_comap_of_surjective
-#align add_submonoid.map_infi_comap_of_surjective AddSubmonoid.map_infᵢ_comap_of_surjective
+theorem map_iInf_comap_of_surjective (S : ι → Submonoid N) : (⨅ i, (S i).comap f).map f = iInf S :=
+  (giMapComap hf).l_iInf_u _
+#align submonoid.map_infi_comap_of_surjective Submonoid.map_iInf_comap_of_surjective
+#align add_submonoid.map_infi_comap_of_surjective AddSubmonoid.map_iInf_comap_of_surjective
 
 /- warning: submonoid.map_sup_comap_of_surjective -> Submonoid.map_sup_comap_of_surjective is a dubious translation:
 lean 3 declaration is
@@ -799,17 +799,17 @@ theorem map_sup_comap_of_surjective (S T : Submonoid N) : (S.comap f ⊔ T.comap
 #align submonoid.map_sup_comap_of_surjective Submonoid.map_sup_comap_of_surjective
 #align add_submonoid.map_sup_comap_of_surjective AddSubmonoid.map_sup_comap_of_surjective
 
-/- warning: submonoid.map_supr_comap_of_surjective -> Submonoid.map_supᵢ_comap_of_surjective is a dubious translation:
+/- warning: submonoid.map_supr_comap_of_surjective -> Submonoid.map_iSup_comap_of_surjective 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {ι : Type.{u4}} {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (forall (S : ι -> (Submonoid.{u2} N _inst_2)), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (supᵢ.{u1, succ u4} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.completeLattice.{u1} M _inst_1))) ι (fun (i : ι) => Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (S i)))) (supᵢ.{u2, succ u4} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeSup.toHasSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.completeLattice.{u2} N _inst_2))) ι S))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {ι : Type.{u4}} {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (forall (S : ι -> (Submonoid.{u2} N _inst_2)), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (iSup.{u1, succ u4} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.completeLattice.{u1} M _inst_1))) ι (fun (i : ι) => Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (S i)))) (iSup.{u2, succ u4} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeSup.toHasSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.completeLattice.{u2} N _inst_2))) ι S))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u4}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u4} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u3, u4} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Surjective.{succ u3, succ u4} M N (FunLike.coe.{succ u2, succ u3, succ u4} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u2, u3, u4} F M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u4} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u3, u4} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} N _inst_2)), Eq.{succ u4} (Submonoid.{u4} N _inst_2) (Submonoid.map.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (supᵢ.{u3, succ u1} (Submonoid.{u3} M _inst_1) (CompleteLattice.toSupSet.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1)) ι (fun (i : ι) => Submonoid.comap.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (S i)))) (supᵢ.{u4, succ u1} (Submonoid.{u4} N _inst_2) (CompleteLattice.toSupSet.{u4} (Submonoid.{u4} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u4} N _inst_2)) ι S))
-Case conversion may be inaccurate. Consider using '#align submonoid.map_supr_comap_of_surjective Submonoid.map_supᵢ_comap_of_surjectiveₓ'. -/
+  forall {M : Type.{u3}} {N : Type.{u4}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u4} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u3, u4} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Surjective.{succ u3, succ u4} M N (FunLike.coe.{succ u2, succ u3, succ u4} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u2, u3, u4} F M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u4} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u3, u4} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} N _inst_2)), Eq.{succ u4} (Submonoid.{u4} N _inst_2) (Submonoid.map.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (iSup.{u3, succ u1} (Submonoid.{u3} M _inst_1) (CompleteLattice.toSupSet.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1)) ι (fun (i : ι) => Submonoid.comap.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (S i)))) (iSup.{u4, succ u1} (Submonoid.{u4} N _inst_2) (CompleteLattice.toSupSet.{u4} (Submonoid.{u4} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u4} N _inst_2)) ι S))
+Case conversion may be inaccurate. Consider using '#align submonoid.map_supr_comap_of_surjective Submonoid.map_iSup_comap_of_surjectiveₓ'. -/
 @[to_additive]
-theorem map_supᵢ_comap_of_surjective (S : ι → Submonoid N) : (⨆ i, (S i).comap f).map f = supᵢ S :=
-  (giMapComap hf).l_supᵢ_u _
-#align submonoid.map_supr_comap_of_surjective Submonoid.map_supᵢ_comap_of_surjective
-#align add_submonoid.map_supr_comap_of_surjective AddSubmonoid.map_supᵢ_comap_of_surjective
+theorem map_iSup_comap_of_surjective (S : ι → Submonoid N) : (⨆ i, (S i).comap f).map f = iSup S :=
+  (giMapComap hf).l_iSup_u _
+#align submonoid.map_supr_comap_of_surjective Submonoid.map_iSup_comap_of_surjective
+#align add_submonoid.map_supr_comap_of_surjective AddSubmonoid.map_iSup_comap_of_surjective
 
 /- warning: submonoid.comap_le_comap_iff_of_surjective -> Submonoid.comap_le_comap_iff_of_surjective is a dubious translation:
 lean 3 declaration is
Diff
@@ -118,7 +118,7 @@ abbrev AddSubmonoid.toSubmonoid' : AddSubmonoid (Additive M) ≃o Submonoid M :=
 lean 3 declaration is
   forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Set.{u1} M), Eq.{succ u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) (fun (_x : RelIso.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))))) (LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))))))) => (Submonoid.{u1} M _inst_1) -> (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))) (RelIso.hasCoeToFun.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))))) (LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))))))) (Submonoid.toAddSubmonoid.{u1} M _inst_1) (Submonoid.closure.{u1} M _inst_1 S)) (AddSubmonoid.closure.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1) (Set.preimage.{u1, u1} (Additive.{u1} M) M (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (Additive.{u1} M) M) (fun (_x : Equiv.{succ u1, succ u1} (Additive.{u1} M) M) => (Additive.{u1} M) -> M) (Equiv.hasCoeToFun.{succ u1, succ u1} (Additive.{u1} M) M) (Additive.toMul.{u1} M)) S))
 but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Set.{u1} M), Eq.{succ u1} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Submonoid.{u1} M _inst_1) => AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.closure.{u1} M _inst_1 S)) (FunLike.coe.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))) (Submonoid.{u1} M _inst_1) (fun (_x : Submonoid.{u1} M _inst_1) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Submonoid.{u1} M _inst_1) => AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) _x) (EmbeddingLike.toFunLike.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))) (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Function.instEmbeddingLikeEmbedding.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))) (RelEmbedding.toEmbedding.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.toRelEmbedding.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (Submonoid.toAddSubmonoid.{u1} M _inst_1))) (Submonoid.closure.{u1} M _inst_1 S)) (AddSubmonoid.closure.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1) (Set.preimage.{u1, u1} (Additive.{u1} M) M (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} (Additive.{u1} M) M) (Additive.{u1} M) (fun (_x : Additive.{u1} M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Additive.{u1} M) => M) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} (Additive.{u1} M) M) (Additive.toMul.{u1} M)) S))
+  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Set.{u1} M), Eq.{succ u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (Submonoid.{u1} M _inst_1) (fun (_x : Submonoid.{u1} M _inst_1) => AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.instRelHomClassRelIso.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298))) (Submonoid.toAddSubmonoid.{u1} M _inst_1) (Submonoid.closure.{u1} M _inst_1 S)) (AddSubmonoid.closure.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1) (Set.preimage.{u1, u1} (Additive.{u1} M) M (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} (Additive.{u1} M) M) (Additive.{u1} M) (fun (_x : Additive.{u1} M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Additive.{u1} M) => M) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} (Additive.{u1} M) M) (Additive.toMul.{u1} M)) S))
 Case conversion may be inaccurate. Consider using '#align submonoid.to_add_submonoid_closure Submonoid.toAddSubmonoid_closureₓ'. -/
 theorem Submonoid.toAddSubmonoid_closure (S : Set M) :
     (Submonoid.closure S).toAddSubmonoid = AddSubmonoid.closure (Additive.toMul ⁻¹' S) :=
@@ -131,7 +131,7 @@ theorem Submonoid.toAddSubmonoid_closure (S : Set M) :
 lean 3 declaration is
   forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Set.{u1} (Additive.{u1} M)), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))))) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))))) (fun (_x : RelIso.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))))) => (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) -> (Submonoid.{u1} M _inst_1)) (RelIso.hasCoeToFun.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))))) (AddSubmonoid.toSubmonoid'.{u1} M _inst_1) (AddSubmonoid.closure.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1) S)) (Submonoid.closure.{u1} M _inst_1 (Set.preimage.{u1, u1} M (Multiplicative.{u1} M) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} M (Multiplicative.{u1} M)) (fun (_x : Equiv.{succ u1, succ u1} M (Multiplicative.{u1} M)) => M -> (Multiplicative.{u1} M)) (Equiv.hasCoeToFun.{succ u1, succ u1} M (Multiplicative.{u1} M)) (Multiplicative.ofAdd.{u1} M)) S))
 but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Set.{u1} (Additive.{u1} M)), Eq.{succ u1} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => Submonoid.{u1} M _inst_1) (AddSubmonoid.closure.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1) S)) (FunLike.coe.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1)) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (fun (_x : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => Submonoid.{u1} M _inst_1) _x) (EmbeddingLike.toFunLike.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1)) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (Function.instEmbeddingLikeEmbedding.{succ u1, succ u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1))) (RelEmbedding.toEmbedding.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.toRelEmbedding.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (AddSubmonoid.toSubmonoid'.{u1} M _inst_1))) (AddSubmonoid.closure.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1) S)) (Submonoid.closure.{u1} M _inst_1 (Set.preimage.{u1, u1} M (Multiplicative.{u1} M) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} M (Multiplicative.{u1} M)) M (fun (_x : M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : M) => Multiplicative.{u1} M) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} M (Multiplicative.{u1} M)) (Multiplicative.ofAdd.{u1} M)) S))
+  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Set.{u1} (Additive.{u1} M)), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (fun (_x : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => Submonoid.{u1} M _inst_1) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.instRelHomClassRelIso.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298))) (AddSubmonoid.toSubmonoid'.{u1} M _inst_1) (AddSubmonoid.closure.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1) S)) (Submonoid.closure.{u1} M _inst_1 (Set.preimage.{u1, u1} M (Multiplicative.{u1} M) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} M (Multiplicative.{u1} M)) M (fun (_x : M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : M) => Multiplicative.{u1} M) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} M (Multiplicative.{u1} M)) (Multiplicative.ofAdd.{u1} M)) S))
 Case conversion may be inaccurate. Consider using '#align add_submonoid.to_submonoid'_closure AddSubmonoid.toSubmonoid'_closureₓ'. -/
 theorem AddSubmonoid.toSubmonoid'_closure (S : Set (Additive M)) :
     (AddSubmonoid.closure S).toSubmonoid' = Submonoid.closure (Multiplicative.ofAdd ⁻¹' S) :=
@@ -186,7 +186,7 @@ abbrev Submonoid.toAddSubmonoid' : Submonoid (Multiplicative A) ≃o AddSubmonoi
 lean 3 declaration is
   forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A] (S : Set.{u1} A), Eq.{succ u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4)))) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) (fun (_x : RelIso.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4))))) (LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))))))) => (AddSubmonoid.{u1} A _inst_4) -> (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))) (RelIso.hasCoeToFun.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4))))) (LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))))))) (AddSubmonoid.toSubmonoid.{u1} A _inst_4) (AddSubmonoid.closure.{u1} A _inst_4 S)) (Submonoid.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4) (Set.preimage.{u1, u1} (Multiplicative.{u1} A) A (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (Multiplicative.{u1} A) A) (fun (_x : Equiv.{succ u1, succ u1} (Multiplicative.{u1} A) A) => (Multiplicative.{u1} A) -> A) (Equiv.hasCoeToFun.{succ u1, succ u1} (Multiplicative.{u1} A) A) (Multiplicative.toAdd.{u1} A)) S))
 but is expected to have type
-  forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A] (S : Set.{u1} A), Eq.{succ u1} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : AddSubmonoid.{u1} A _inst_4) => Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.closure.{u1} A _inst_4 S)) (FunLike.coe.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))) (AddSubmonoid.{u1} A _inst_4) (fun (_x : AddSubmonoid.{u1} A _inst_4) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : AddSubmonoid.{u1} A _inst_4) => Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) _x) (EmbeddingLike.toFunLike.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))) (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Function.instEmbeddingLikeEmbedding.{succ u1, succ u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))) (RelEmbedding.toEmbedding.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.toRelEmbedding.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (AddSubmonoid.toSubmonoid.{u1} A _inst_4))) (AddSubmonoid.closure.{u1} A _inst_4 S)) (Submonoid.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4) (Set.preimage.{u1, u1} (Multiplicative.{u1} A) A (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} (Multiplicative.{u1} A) A) (Multiplicative.{u1} A) (fun (_x : Multiplicative.{u1} A) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Multiplicative.{u1} A) => A) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} (Multiplicative.{u1} A) A) (Multiplicative.toAdd.{u1} A)) S))
+  forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A] (S : Set.{u1} A), Eq.{succ u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (AddSubmonoid.{u1} A _inst_4) (fun (_x : AddSubmonoid.{u1} A _inst_4) => Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.instRelHomClassRelIso.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298))) (AddSubmonoid.toSubmonoid.{u1} A _inst_4) (AddSubmonoid.closure.{u1} A _inst_4 S)) (Submonoid.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4) (Set.preimage.{u1, u1} (Multiplicative.{u1} A) A (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} (Multiplicative.{u1} A) A) (Multiplicative.{u1} A) (fun (_x : Multiplicative.{u1} A) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Multiplicative.{u1} A) => A) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} (Multiplicative.{u1} A) A) (Multiplicative.toAdd.{u1} A)) S))
 Case conversion may be inaccurate. Consider using '#align add_submonoid.to_submonoid_closure AddSubmonoid.toSubmonoid_closureₓ'. -/
 theorem AddSubmonoid.toSubmonoid_closure (S : Set A) :
     (AddSubmonoid.closure S).toSubmonoid = Submonoid.closure (Multiplicative.toAdd ⁻¹' S) :=
@@ -200,7 +200,7 @@ theorem AddSubmonoid.toSubmonoid_closure (S : Set A) :
 lean 3 declaration is
   forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A] (S : Set.{u1} (Multiplicative.{u1} A)), Eq.{succ u1} (AddSubmonoid.{u1} A _inst_4) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))))) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4))))) (fun (_x : RelIso.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) (LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4)))))) => (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) -> (AddSubmonoid.{u1} A _inst_4)) (RelIso.hasCoeToFun.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) (LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4)))))) (Submonoid.toAddSubmonoid'.{u1} A _inst_4) (Submonoid.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4) S)) (AddSubmonoid.closure.{u1} A _inst_4 (Set.preimage.{u1, u1} A (Additive.{u1} A) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} A (Additive.{u1} A)) (fun (_x : Equiv.{succ u1, succ u1} A (Additive.{u1} A)) => A -> (Additive.{u1} A)) (Equiv.hasCoeToFun.{succ u1, succ u1} A (Additive.{u1} A)) (Additive.ofMul.{u1} A)) S))
 but is expected to have type
-  forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A] (S : Set.{u1} (Multiplicative.{u1} A)), Eq.{succ u1} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => AddSubmonoid.{u1} A _inst_4) (Submonoid.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4) S)) (FunLike.coe.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4)) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (fun (_x : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => AddSubmonoid.{u1} A _inst_4) _x) (EmbeddingLike.toFunLike.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4)) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (Function.instEmbeddingLikeEmbedding.{succ u1, succ u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4))) (RelEmbedding.toEmbedding.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.toRelEmbedding.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (Submonoid.toAddSubmonoid'.{u1} A _inst_4))) (Submonoid.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4) S)) (AddSubmonoid.closure.{u1} A _inst_4 (Set.preimage.{u1, u1} A (Additive.{u1} A) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} A (Additive.{u1} A)) A (fun (_x : A) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : A) => Additive.{u1} A) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} A (Additive.{u1} A)) (Additive.ofMul.{u1} A)) S))
+  forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A] (S : Set.{u1} (Multiplicative.{u1} A)), Eq.{succ u1} (AddSubmonoid.{u1} A _inst_4) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (fun (_x : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => AddSubmonoid.{u1} A _inst_4) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.instRelHomClassRelIso.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298))) (Submonoid.toAddSubmonoid'.{u1} A _inst_4) (Submonoid.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4) S)) (AddSubmonoid.closure.{u1} A _inst_4 (Set.preimage.{u1, u1} A (Additive.{u1} A) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} A (Additive.{u1} A)) A (fun (_x : A) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : A) => Additive.{u1} A) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} A (Additive.{u1} A)) (Additive.ofMul.{u1} A)) S))
 Case conversion may be inaccurate. Consider using '#align submonoid.to_add_submonoid'_closure Submonoid.toAddSubmonoid'_closureₓ'. -/
 theorem Submonoid.toAddSubmonoid'_closure (S : Set (Multiplicative A)) :
     (Submonoid.closure S).toAddSubmonoid' = AddSubmonoid.closure (Additive.ofMul ⁻¹' S) :=
Diff
@@ -118,7 +118,7 @@ abbrev AddSubmonoid.toSubmonoid' : AddSubmonoid (Additive M) ≃o Submonoid M :=
 lean 3 declaration is
   forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Set.{u1} M), Eq.{succ u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) (fun (_x : RelIso.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))))) (LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))))))) => (Submonoid.{u1} M _inst_1) -> (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))) (RelIso.hasCoeToFun.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))))) (LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))))))) (Submonoid.toAddSubmonoid.{u1} M _inst_1) (Submonoid.closure.{u1} M _inst_1 S)) (AddSubmonoid.closure.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1) (Set.preimage.{u1, u1} (Additive.{u1} M) M (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (Additive.{u1} M) M) (fun (_x : Equiv.{succ u1, succ u1} (Additive.{u1} M) M) => (Additive.{u1} M) -> M) (Equiv.hasCoeToFun.{succ u1, succ u1} (Additive.{u1} M) M) (Additive.toMul.{u1} M)) S))
 but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Set.{u1} M), Eq.{succ u1} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Submonoid.{u1} M _inst_1) => AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.closure.{u1} M _inst_1 S)) (FunLike.coe.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))) (Submonoid.{u1} M _inst_1) (fun (_x : Submonoid.{u1} M _inst_1) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Submonoid.{u1} M _inst_1) => AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) _x) (EmbeddingLike.toFunLike.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))) (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Function.instEmbeddingLikeEmbedding.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))) (RelEmbedding.toEmbedding.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.toRelEmbedding.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (Submonoid.toAddSubmonoid.{u1} M _inst_1))) (Submonoid.closure.{u1} M _inst_1 S)) (AddSubmonoid.closure.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1) (Set.preimage.{u1, u1} (Additive.{u1} M) M (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} (Additive.{u1} M) M) (Additive.{u1} M) (fun (_x : Additive.{u1} M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : Additive.{u1} M) => M) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} (Additive.{u1} M) M) (Additive.toMul.{u1} M)) S))
+  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Set.{u1} M), Eq.{succ u1} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Submonoid.{u1} M _inst_1) => AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.closure.{u1} M _inst_1 S)) (FunLike.coe.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))) (Submonoid.{u1} M _inst_1) (fun (_x : Submonoid.{u1} M _inst_1) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Submonoid.{u1} M _inst_1) => AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) _x) (EmbeddingLike.toFunLike.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))) (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Function.instEmbeddingLikeEmbedding.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))) (RelEmbedding.toEmbedding.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.toRelEmbedding.{u1, u1} (Submonoid.{u1} M _inst_1) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (Submonoid.toAddSubmonoid.{u1} M _inst_1))) (Submonoid.closure.{u1} M _inst_1 S)) (AddSubmonoid.closure.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1) (Set.preimage.{u1, u1} (Additive.{u1} M) M (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} (Additive.{u1} M) M) (Additive.{u1} M) (fun (_x : Additive.{u1} M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Additive.{u1} M) => M) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} (Additive.{u1} M) M) (Additive.toMul.{u1} M)) S))
 Case conversion may be inaccurate. Consider using '#align submonoid.to_add_submonoid_closure Submonoid.toAddSubmonoid_closureₓ'. -/
 theorem Submonoid.toAddSubmonoid_closure (S : Set M) :
     (Submonoid.closure S).toAddSubmonoid = AddSubmonoid.closure (Additive.toMul ⁻¹' S) :=
@@ -131,7 +131,7 @@ theorem Submonoid.toAddSubmonoid_closure (S : Set M) :
 lean 3 declaration is
   forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Set.{u1} (Additive.{u1} M)), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1))))) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))))) (fun (_x : RelIso.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))))) => (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) -> (Submonoid.{u1} M _inst_1)) (RelIso.hasCoeToFun.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Additive.{u1} M) (AddSubmonoid.setLike.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))))) (AddSubmonoid.toSubmonoid'.{u1} M _inst_1) (AddSubmonoid.closure.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1) S)) (Submonoid.closure.{u1} M _inst_1 (Set.preimage.{u1, u1} M (Multiplicative.{u1} M) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} M (Multiplicative.{u1} M)) (fun (_x : Equiv.{succ u1, succ u1} M (Multiplicative.{u1} M)) => M -> (Multiplicative.{u1} M)) (Equiv.hasCoeToFun.{succ u1, succ u1} M (Multiplicative.{u1} M)) (Multiplicative.ofAdd.{u1} M)) S))
 but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Set.{u1} (Additive.{u1} M)), Eq.{succ u1} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => Submonoid.{u1} M _inst_1) (AddSubmonoid.closure.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1) S)) (FunLike.coe.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1)) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (fun (_x : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => Submonoid.{u1} M _inst_1) _x) (EmbeddingLike.toFunLike.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1)) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (Function.instEmbeddingLikeEmbedding.{succ u1, succ u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1))) (RelEmbedding.toEmbedding.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.toRelEmbedding.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (AddSubmonoid.toSubmonoid'.{u1} M _inst_1))) (AddSubmonoid.closure.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1) S)) (Submonoid.closure.{u1} M _inst_1 (Set.preimage.{u1, u1} M (Multiplicative.{u1} M) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} M (Multiplicative.{u1} M)) M (fun (_x : M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : M) => Multiplicative.{u1} M) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} M (Multiplicative.{u1} M)) (Multiplicative.ofAdd.{u1} M)) S))
+  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Set.{u1} (Additive.{u1} M)), Eq.{succ u1} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => Submonoid.{u1} M _inst_1) (AddSubmonoid.closure.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1) S)) (FunLike.coe.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1)) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (fun (_x : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => Submonoid.{u1} M _inst_1) _x) (EmbeddingLike.toFunLike.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1)) (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (Function.instEmbeddingLikeEmbedding.{succ u1, succ u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1))) (RelEmbedding.toEmbedding.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.toRelEmbedding.{u1, u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Submonoid.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) => LE.le.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} M _inst_1) => LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (AddSubmonoid.toSubmonoid'.{u1} M _inst_1))) (AddSubmonoid.closure.{u1} (Additive.{u1} M) (Additive.addZeroClass.{u1} M _inst_1) S)) (Submonoid.closure.{u1} M _inst_1 (Set.preimage.{u1, u1} M (Multiplicative.{u1} M) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} M (Multiplicative.{u1} M)) M (fun (_x : M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : M) => Multiplicative.{u1} M) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} M (Multiplicative.{u1} M)) (Multiplicative.ofAdd.{u1} M)) S))
 Case conversion may be inaccurate. Consider using '#align add_submonoid.to_submonoid'_closure AddSubmonoid.toSubmonoid'_closureₓ'. -/
 theorem AddSubmonoid.toSubmonoid'_closure (S : Set (Additive M)) :
     (AddSubmonoid.closure S).toSubmonoid' = Submonoid.closure (Multiplicative.ofAdd ⁻¹' S) :=
@@ -186,7 +186,7 @@ abbrev Submonoid.toAddSubmonoid' : Submonoid (Multiplicative A) ≃o AddSubmonoi
 lean 3 declaration is
   forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A] (S : Set.{u1} A), Eq.{succ u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4)))) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) (fun (_x : RelIso.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4))))) (LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))))))) => (AddSubmonoid.{u1} A _inst_4) -> (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))) (RelIso.hasCoeToFun.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4))))) (LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))))))) (AddSubmonoid.toSubmonoid.{u1} A _inst_4) (AddSubmonoid.closure.{u1} A _inst_4 S)) (Submonoid.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4) (Set.preimage.{u1, u1} (Multiplicative.{u1} A) A (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (Multiplicative.{u1} A) A) (fun (_x : Equiv.{succ u1, succ u1} (Multiplicative.{u1} A) A) => (Multiplicative.{u1} A) -> A) (Equiv.hasCoeToFun.{succ u1, succ u1} (Multiplicative.{u1} A) A) (Multiplicative.toAdd.{u1} A)) S))
 but is expected to have type
-  forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A] (S : Set.{u1} A), Eq.{succ u1} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : AddSubmonoid.{u1} A _inst_4) => Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.closure.{u1} A _inst_4 S)) (FunLike.coe.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))) (AddSubmonoid.{u1} A _inst_4) (fun (_x : AddSubmonoid.{u1} A _inst_4) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : AddSubmonoid.{u1} A _inst_4) => Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) _x) (EmbeddingLike.toFunLike.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))) (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Function.instEmbeddingLikeEmbedding.{succ u1, succ u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))) (RelEmbedding.toEmbedding.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.toRelEmbedding.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (AddSubmonoid.toSubmonoid.{u1} A _inst_4))) (AddSubmonoid.closure.{u1} A _inst_4 S)) (Submonoid.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4) (Set.preimage.{u1, u1} (Multiplicative.{u1} A) A (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} (Multiplicative.{u1} A) A) (Multiplicative.{u1} A) (fun (_x : Multiplicative.{u1} A) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : Multiplicative.{u1} A) => A) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} (Multiplicative.{u1} A) A) (Multiplicative.toAdd.{u1} A)) S))
+  forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A] (S : Set.{u1} A), Eq.{succ u1} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : AddSubmonoid.{u1} A _inst_4) => Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.closure.{u1} A _inst_4 S)) (FunLike.coe.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))) (AddSubmonoid.{u1} A _inst_4) (fun (_x : AddSubmonoid.{u1} A _inst_4) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : AddSubmonoid.{u1} A _inst_4) => Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) _x) (EmbeddingLike.toFunLike.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))) (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Function.instEmbeddingLikeEmbedding.{succ u1, succ u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))) (RelEmbedding.toEmbedding.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.toRelEmbedding.{u1, u1} (AddSubmonoid.{u1} A _inst_4) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (AddSubmonoid.toSubmonoid.{u1} A _inst_4))) (AddSubmonoid.closure.{u1} A _inst_4 S)) (Submonoid.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4) (Set.preimage.{u1, u1} (Multiplicative.{u1} A) A (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} (Multiplicative.{u1} A) A) (Multiplicative.{u1} A) (fun (_x : Multiplicative.{u1} A) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : Multiplicative.{u1} A) => A) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} (Multiplicative.{u1} A) A) (Multiplicative.toAdd.{u1} A)) S))
 Case conversion may be inaccurate. Consider using '#align add_submonoid.to_submonoid_closure AddSubmonoid.toSubmonoid_closureₓ'. -/
 theorem AddSubmonoid.toSubmonoid_closure (S : Set A) :
     (AddSubmonoid.closure S).toSubmonoid = Submonoid.closure (Multiplicative.toAdd ⁻¹' S) :=
@@ -200,7 +200,7 @@ theorem AddSubmonoid.toSubmonoid_closure (S : Set A) :
 lean 3 declaration is
   forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A] (S : Set.{u1} (Multiplicative.{u1} A)), Eq.{succ u1} (AddSubmonoid.{u1} A _inst_4) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4))))) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4))))) (fun (_x : RelIso.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) (LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4)))))) => (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) -> (AddSubmonoid.{u1} A _inst_4)) (RelIso.hasCoeToFun.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Multiplicative.{u1} A) (Submonoid.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) (LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (SetLike.partialOrder.{u1, u1} (AddSubmonoid.{u1} A _inst_4) A (AddSubmonoid.setLike.{u1} A _inst_4)))))) (Submonoid.toAddSubmonoid'.{u1} A _inst_4) (Submonoid.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4) S)) (AddSubmonoid.closure.{u1} A _inst_4 (Set.preimage.{u1, u1} A (Additive.{u1} A) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} A (Additive.{u1} A)) (fun (_x : Equiv.{succ u1, succ u1} A (Additive.{u1} A)) => A -> (Additive.{u1} A)) (Equiv.hasCoeToFun.{succ u1, succ u1} A (Additive.{u1} A)) (Additive.ofMul.{u1} A)) S))
 but is expected to have type
-  forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A] (S : Set.{u1} (Multiplicative.{u1} A)), Eq.{succ u1} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => AddSubmonoid.{u1} A _inst_4) (Submonoid.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4) S)) (FunLike.coe.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4)) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (fun (_x : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => AddSubmonoid.{u1} A _inst_4) _x) (EmbeddingLike.toFunLike.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4)) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (Function.instEmbeddingLikeEmbedding.{succ u1, succ u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4))) (RelEmbedding.toEmbedding.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.toRelEmbedding.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (Submonoid.toAddSubmonoid'.{u1} A _inst_4))) (Submonoid.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4) S)) (AddSubmonoid.closure.{u1} A _inst_4 (Set.preimage.{u1, u1} A (Additive.{u1} A) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} A (Additive.{u1} A)) A (fun (_x : A) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : A) => Additive.{u1} A) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} A (Additive.{u1} A)) (Additive.ofMul.{u1} A)) S))
+  forall {A : Type.{u1}} [_inst_4 : AddZeroClass.{u1} A] (S : Set.{u1} (Multiplicative.{u1} A)), Eq.{succ u1} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => AddSubmonoid.{u1} A _inst_4) (Submonoid.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4) S)) (FunLike.coe.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4)) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (fun (_x : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => AddSubmonoid.{u1} A _inst_4) _x) (EmbeddingLike.toFunLike.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4)) (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (Function.instEmbeddingLikeEmbedding.{succ u1, succ u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4))) (RelEmbedding.toEmbedding.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.toRelEmbedding.{u1, u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (AddSubmonoid.{u1} A _inst_4) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) => LE.le.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Preorder.toLE.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)) (Submonoid.instCompleteLatticeSubmonoid.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubmonoid.{u1} A _inst_4) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubmonoid.{u1} A _inst_4) => LE.le.{u1} (AddSubmonoid.{u1} A _inst_4) (Preorder.toLE.{u1} (AddSubmonoid.{u1} A _inst_4) (PartialOrder.toPreorder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubmonoid.{u1} A _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubmonoid.{u1} A _inst_4) (AddSubmonoid.instCompleteLatticeAddSubmonoid.{u1} A _inst_4))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (Submonoid.toAddSubmonoid'.{u1} A _inst_4))) (Submonoid.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mulOneClass.{u1} A _inst_4) S)) (AddSubmonoid.closure.{u1} A _inst_4 (Set.preimage.{u1, u1} A (Additive.{u1} A) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} A (Additive.{u1} A)) A (fun (_x : A) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : A) => Additive.{u1} A) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} A (Additive.{u1} A)) (Additive.ofMul.{u1} A)) S))
 Case conversion may be inaccurate. Consider using '#align submonoid.to_add_submonoid'_closure Submonoid.toAddSubmonoid'_closureₓ'. -/
 theorem Submonoid.toAddSubmonoid'_closure (S : Set (Multiplicative A)) :
     (Submonoid.closure S).toAddSubmonoid' = AddSubmonoid.closure (Additive.ofMul ⁻¹' S) :=
@@ -242,7 +242,7 @@ def comap (f : F) (S : Submonoid N) : Submonoid M
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (S : Submonoid.{u2} N _inst_2) (f : F), Eq.{succ u1} (Set.{u1} M) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)) (Set.preimage.{u1, 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) (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 mc))) f) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Submonoid.{u2} N _inst_2) (Set.{u2} N) (HasLiftT.mk.{succ u2, succ u2} (Submonoid.{u2} N _inst_2) (Set.{u2} N) (CoeTCₓ.coe.{succ u2, succ u2} (Submonoid.{u2} N _inst_2) (Set.{u2} N) (SetLike.Set.hasCoeT.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) S))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] (S : Submonoid.{u3} N _inst_2) (f : F), Eq.{succ u2} (Set.{u2} M) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S)) (Set.preimage.{u2, u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f) (SetLike.coe.{u3, u3} (Submonoid.{u3} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u3} N _inst_2) S))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] (S : Submonoid.{u3} N _inst_2) (f : F), Eq.{succ u2} (Set.{u2} M) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S)) (Set.preimage.{u2, u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f) (SetLike.coe.{u3, u3} (Submonoid.{u3} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u3} N _inst_2) S))
 Case conversion may be inaccurate. Consider using '#align submonoid.coe_comap Submonoid.coe_comapₓ'. -/
 @[simp, to_additive]
 theorem coe_comap (S : Submonoid N) (f : F) : (S.comap f : Set M) = f ⁻¹' S :=
@@ -254,7 +254,7 @@ theorem coe_comap (S : Submonoid N) (f : F) : (S.comap f : Set M) = f ⁻¹' S :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {S : Submonoid.{u2} N _inst_2} {f : F} {x : M}, Iff (Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)) (Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{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 mc))) f x) S)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {S : Submonoid.{u3} N _inst_2} {f : F} {x : M}, Iff (Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S)) (Membership.mem.{u3, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (Submonoid.{u3} N _inst_2) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u3} N _inst_2)) (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f x) S)
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {S : Submonoid.{u3} N _inst_2} {f : F} {x : M}, Iff (Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S)) (Membership.mem.{u3, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (Submonoid.{u3} N _inst_2) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u3} N _inst_2)) (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f x) S)
 Case conversion may be inaccurate. Consider using '#align submonoid.mem_comap Submonoid.mem_comapₓ'. -/
 @[simp, to_additive]
 theorem mem_comap {S : Submonoid N} {f : F} {x : M} : x ∈ S.comap f ↔ f x ∈ S :=
@@ -301,7 +301,7 @@ def map (f : F) (S : Submonoid M) : Submonoid N
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F) (S : Submonoid.{u1} M _inst_1), Eq.{succ u2} (Set.{u2} N) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Submonoid.{u2} N _inst_2) (Set.{u2} N) (HasLiftT.mk.{succ u2, succ u2} (Submonoid.{u2} N _inst_2) (Set.{u2} N) (CoeTCₓ.coe.{succ u2, succ u2} (Submonoid.{u2} N _inst_2) (Set.{u2} N) (SetLike.Set.hasCoeT.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)) (Set.image.{u1, 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) (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 mc))) f) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) (S : Submonoid.{u3} M _inst_1), Eq.{succ u2} (Set.{u2} N) (SetLike.coe.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)) (Set.image.{u3, u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f) (SetLike.coe.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1) S))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) (S : Submonoid.{u3} M _inst_1), Eq.{succ u2} (Set.{u2} N) (SetLike.coe.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)) (Set.image.{u3, u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f) (SetLike.coe.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1) S))
 Case conversion may be inaccurate. Consider using '#align submonoid.coe_map Submonoid.coe_mapₓ'. -/
 @[simp, to_additive]
 theorem coe_map (f : F) (S : Submonoid M) : (S.map f : Set N) = f '' S :=
@@ -313,7 +313,7 @@ theorem coe_map (f : F) (S : Submonoid M) : (S.map f : Set N) = f '' S :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F} {S : Submonoid.{u1} M _inst_1} {y : N}, Iff (Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) y (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)) (Exists.{succ u1} M (fun (x : M) => Exists.{0} (Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S) (fun (H : Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S) => 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 (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 mc))) f x) y)))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F} {S : Submonoid.{u3} M _inst_1} {y : N}, Iff (Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) y (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)) (Exists.{succ u3} M (fun (x : M) => And (Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x S) (Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (MulHomClass.toFunLike.{u1, u3, u2} F M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f x) y)))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F} {S : Submonoid.{u3} M _inst_1} {y : N}, Iff (Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) y (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)) (Exists.{succ u3} M (fun (x : M) => And (Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x S) (Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (MulHomClass.toFunLike.{u1, u3, u2} F M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f x) y)))
 Case conversion may be inaccurate. Consider using '#align submonoid.mem_map Submonoid.mem_mapₓ'. -/
 @[simp, to_additive]
 theorem mem_map {f : F} {S : Submonoid M} {y : N} : y ∈ S.map f ↔ ∃ x ∈ S, f x = y :=
@@ -325,7 +325,7 @@ theorem mem_map {f : F} {S : Submonoid M} {y : N} : y ∈ S.map f ↔ ∃ x ∈
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F) {S : Submonoid.{u1} M _inst_1} {x : M}, (Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S) -> (Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{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 mc))) f x) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) {S : Submonoid.{u3} M _inst_1} {x : M}, (Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x S) -> (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f x) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) {S : Submonoid.{u3} M _inst_1} {x : M}, (Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x S) -> (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f x) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S))
 Case conversion may be inaccurate. Consider using '#align submonoid.mem_map_of_mem Submonoid.mem_map_of_memₓ'. -/
 @[to_additive]
 theorem mem_map_of_mem (f : F) {S : Submonoid M} {x : M} (hx : x ∈ S) : f x ∈ S.map f :=
@@ -337,7 +337,7 @@ theorem mem_map_of_mem (f : F) {S : Submonoid M} {x : M} (hx : x ∈ S) : f x 
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F) (S : Submonoid.{u1} M _inst_1) (x : coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S), Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{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 mc))) f ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S))))) x)) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) (S : Submonoid.{u3} M _inst_1) (x : Subtype.{succ u3} M (fun (x : M) => Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x S)), Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (Subtype.val.{succ u3} M (fun (x : M) => Membership.mem.{u3, u3} M (Set.{u3} M) (Set.instMembershipSet.{u3} M) x (SetLike.coe.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1) S)) x)) (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f (Subtype.val.{succ u3} M (fun (x : M) => Membership.mem.{u3, u3} M (Set.{u3} M) (Set.instMembershipSet.{u3} M) x (SetLike.coe.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1) S)) x)) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) (S : Submonoid.{u3} M _inst_1) (x : Subtype.{succ u3} M (fun (x : M) => Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x S)), Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (Subtype.val.{succ u3} M (fun (x : M) => Membership.mem.{u3, u3} M (Set.{u3} M) (Set.instMembershipSet.{u3} M) x (SetLike.coe.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1) S)) x)) (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f (Subtype.val.{succ u3} M (fun (x : M) => Membership.mem.{u3, u3} M (Set.{u3} M) (Set.instMembershipSet.{u3} M) x (SetLike.coe.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1) S)) x)) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)
 Case conversion may be inaccurate. Consider using '#align submonoid.apply_coe_mem_map Submonoid.apply_coe_mem_mapₓ'. -/
 @[to_additive]
 theorem apply_coe_mem_map (f : F) (S : Submonoid M) (x : S) : f x ∈ S.map f :=
@@ -365,7 +365,7 @@ include mc
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (forall {S : Submonoid.{u1} M _inst_1} {x : M}, Iff (Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{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 mc))) f x) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)) (Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall {S : Submonoid.{u3} M _inst_1} {x : M}, Iff (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f x) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)) (Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x S))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall {S : Submonoid.{u3} M _inst_1} {x : M}, Iff (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f x) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)) (Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x S))
 Case conversion may be inaccurate. Consider using '#align submonoid.mem_map_iff_mem Submonoid.mem_map_iff_memₓ'. -/
 @[to_additive]
 theorem mem_map_iff_mem {f : F} (hf : Function.Injective f) {S : Submonoid M} {x : M} :
@@ -587,7 +587,7 @@ include hf
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (GaloisCoinsertion.{u1, u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u1, succ u2} M N (FunLike.coe.{succ u3, succ u1, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 mc)) f)) -> (GaloisCoinsertion.{u1, u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u1, succ u2} M N (FunLike.coe.{succ u3, succ u1, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 mc)) f)) -> (GaloisCoinsertion.{u1, u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
 Case conversion may be inaccurate. Consider using '#align submonoid.gci_map_comap Submonoid.gciMapComapₓ'. -/
 /-- `map f` and `comap f` form a `galois_coinsertion` when `f` is injective. -/
 @[to_additive " `map f` and `comap f` form a `galois_coinsertion` when `f` is injective. "]
@@ -600,7 +600,7 @@ def gciMapComap : GaloisCoinsertion (map f) (comap f) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (forall (S : Submonoid.{u1} M _inst_1), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)) S)
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} M _inst_1), Eq.{succ u3} (Submonoid.{u3} M _inst_1) (Submonoid.comap.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)) S)
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} M _inst_1), Eq.{succ u3} (Submonoid.{u3} M _inst_1) (Submonoid.comap.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)) S)
 Case conversion may be inaccurate. Consider using '#align submonoid.comap_map_eq_of_injective Submonoid.comap_map_eq_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_map_eq_of_injective (S : Submonoid M) : (S.map f).comap f = S :=
@@ -612,7 +612,7 @@ theorem comap_map_eq_of_injective (S : Submonoid M) : (S.map f).comap f = S :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (Function.Surjective.{succ u2, succ u1} (Submonoid.{u2} N _inst_2) (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (Function.Surjective.{succ u3, succ u2} (Submonoid.{u3} N _inst_2) (Submonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (Function.Surjective.{succ u3, succ u2} (Submonoid.{u3} N _inst_2) (Submonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f))
 Case conversion may be inaccurate. Consider using '#align submonoid.comap_surjective_of_injective Submonoid.comap_surjective_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_surjective_of_injective : Function.Surjective (comap f) :=
@@ -624,7 +624,7 @@ theorem comap_surjective_of_injective : Function.Surjective (comap f) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (Function.Injective.{succ u1, succ u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (Function.Injective.{succ u3, succ u2} (Submonoid.{u3} M _inst_1) (Submonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (Function.Injective.{succ u3, succ u2} (Submonoid.{u3} M _inst_1) (Submonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f))
 Case conversion may be inaccurate. Consider using '#align submonoid.map_injective_of_injective Submonoid.map_injective_of_injectiveₓ'. -/
 @[to_additive]
 theorem map_injective_of_injective : Function.Injective (map f) :=
@@ -636,7 +636,7 @@ theorem map_injective_of_injective : Function.Injective (map f) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (forall (S : Submonoid.{u1} M _inst_1) (T : Submonoid.{u1} M _inst_1), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Inf.inf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasInf.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))) (Inf.inf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasInf.{u1} M _inst_1) S T))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} M _inst_1) (T : Submonoid.{u3} M _inst_1), Eq.{succ u3} (Submonoid.{u3} M _inst_1) (Submonoid.comap.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Inf.inf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instInfSubmonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f T))) (Inf.inf.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instInfSubmonoid.{u3} M _inst_1) S T))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} M _inst_1) (T : Submonoid.{u3} M _inst_1), Eq.{succ u3} (Submonoid.{u3} M _inst_1) (Submonoid.comap.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Inf.inf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instInfSubmonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f T))) (Inf.inf.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instInfSubmonoid.{u3} M _inst_1) S T))
 Case conversion may be inaccurate. Consider using '#align submonoid.comap_inf_map_of_injective Submonoid.comap_inf_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_inf_map_of_injective (S T : Submonoid M) : (S.map f ⊓ T.map f).comap f = S ⊓ T :=
@@ -648,7 +648,7 @@ theorem comap_inf_map_of_injective (S T : Submonoid M) : (S.map f ⊓ T.map f).c
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {ι : Type.{u4}} {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) (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 mc))) f)) -> (forall (S : ι -> (Submonoid.{u1} M _inst_1)), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (infᵢ.{u2, succ u4} (Submonoid.{u2} N _inst_2) (Submonoid.hasInf.{u2} N _inst_2) ι (fun (i : ι) => Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (S i)))) (infᵢ.{u1, succ u4} (Submonoid.{u1} M _inst_1) (Submonoid.hasInf.{u1} M _inst_1) ι S))
 but is expected to have type
-  forall {M : Type.{u4}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u4} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u4, u3} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Injective.{succ u4, succ u3} M N (FunLike.coe.{succ u2, succ u4, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u2, u4, u3} F M N (MulOneClass.toMul.{u4} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u4, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} M _inst_1)), Eq.{succ u4} (Submonoid.{u4} M _inst_1) (Submonoid.comap.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (infᵢ.{u3, succ u1} (Submonoid.{u3} N _inst_2) (Submonoid.instInfSetSubmonoid.{u3} N _inst_2) ι (fun (i : ι) => Submonoid.map.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (S i)))) (infᵢ.{u4, succ u1} (Submonoid.{u4} M _inst_1) (Submonoid.instInfSetSubmonoid.{u4} M _inst_1) ι S))
+  forall {M : Type.{u4}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u4} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u4, u3} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Injective.{succ u4, succ u3} M N (FunLike.coe.{succ u2, succ u4, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u2, u4, u3} F M N (MulOneClass.toMul.{u4} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u4, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} M _inst_1)), Eq.{succ u4} (Submonoid.{u4} M _inst_1) (Submonoid.comap.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (infᵢ.{u3, succ u1} (Submonoid.{u3} N _inst_2) (Submonoid.instInfSetSubmonoid.{u3} N _inst_2) ι (fun (i : ι) => Submonoid.map.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (S i)))) (infᵢ.{u4, succ u1} (Submonoid.{u4} M _inst_1) (Submonoid.instInfSetSubmonoid.{u4} M _inst_1) ι S))
 Case conversion may be inaccurate. Consider using '#align submonoid.comap_infi_map_of_injective Submonoid.comap_infᵢ_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_infᵢ_map_of_injective (S : ι → Submonoid M) : (⨅ i, (S i).map f).comap f = infᵢ S :=
@@ -660,7 +660,7 @@ theorem comap_infᵢ_map_of_injective (S : ι → Submonoid M) : (⨅ i, (S i).m
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (forall (S : Submonoid.{u1} M _inst_1) (T : Submonoid.{u1} M _inst_1), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Sup.sup.{u2} (Submonoid.{u2} N _inst_2) (SemilatticeSup.toHasSup.{u2} (Submonoid.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.completeLattice.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))) (Sup.sup.{u1} (Submonoid.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Submonoid.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.completeLattice.{u1} M _inst_1)))) S T))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} M _inst_1) (T : Submonoid.{u3} M _inst_1), Eq.{succ u3} (Submonoid.{u3} M _inst_1) (Submonoid.comap.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Sup.sup.{u2} (Submonoid.{u2} N _inst_2) (SemilatticeSup.toSup.{u2} (Submonoid.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f T))) (Sup.sup.{u3} (Submonoid.{u3} M _inst_1) (SemilatticeSup.toSup.{u3} (Submonoid.{u3} M _inst_1) (Lattice.toSemilatticeSup.{u3} (Submonoid.{u3} M _inst_1) (CompleteLattice.toLattice.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1)))) S T))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} M _inst_1) (T : Submonoid.{u3} M _inst_1), Eq.{succ u3} (Submonoid.{u3} M _inst_1) (Submonoid.comap.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Sup.sup.{u2} (Submonoid.{u2} N _inst_2) (SemilatticeSup.toSup.{u2} (Submonoid.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f T))) (Sup.sup.{u3} (Submonoid.{u3} M _inst_1) (SemilatticeSup.toSup.{u3} (Submonoid.{u3} M _inst_1) (Lattice.toSemilatticeSup.{u3} (Submonoid.{u3} M _inst_1) (CompleteLattice.toLattice.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1)))) S T))
 Case conversion may be inaccurate. Consider using '#align submonoid.comap_sup_map_of_injective Submonoid.comap_sup_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_sup_map_of_injective (S T : Submonoid M) : (S.map f ⊔ T.map f).comap f = S ⊔ T :=
@@ -672,7 +672,7 @@ theorem comap_sup_map_of_injective (S T : Submonoid M) : (S.map f ⊔ T.map f).c
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {ι : Type.{u4}} {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) (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 mc))) f)) -> (forall (S : ι -> (Submonoid.{u1} M _inst_1)), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (supᵢ.{u2, succ u4} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeSup.toHasSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.completeLattice.{u2} N _inst_2))) ι (fun (i : ι) => Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (S i)))) (supᵢ.{u1, succ u4} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.completeLattice.{u1} M _inst_1))) ι S))
 but is expected to have type
-  forall {M : Type.{u4}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u4} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u4, u3} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Injective.{succ u4, succ u3} M N (FunLike.coe.{succ u2, succ u4, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u2, u4, u3} F M N (MulOneClass.toMul.{u4} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u4, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} M _inst_1)), Eq.{succ u4} (Submonoid.{u4} M _inst_1) (Submonoid.comap.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (supᵢ.{u3, succ u1} (Submonoid.{u3} N _inst_2) (CompleteLattice.toSupSet.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2)) ι (fun (i : ι) => Submonoid.map.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (S i)))) (supᵢ.{u4, succ u1} (Submonoid.{u4} M _inst_1) (CompleteLattice.toSupSet.{u4} (Submonoid.{u4} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u4} M _inst_1)) ι S))
+  forall {M : Type.{u4}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u4} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u4, u3} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Injective.{succ u4, succ u3} M N (FunLike.coe.{succ u2, succ u4, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u2, u4, u3} F M N (MulOneClass.toMul.{u4} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u4, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} M _inst_1)), Eq.{succ u4} (Submonoid.{u4} M _inst_1) (Submonoid.comap.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (supᵢ.{u3, succ u1} (Submonoid.{u3} N _inst_2) (CompleteLattice.toSupSet.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2)) ι (fun (i : ι) => Submonoid.map.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (S i)))) (supᵢ.{u4, succ u1} (Submonoid.{u4} M _inst_1) (CompleteLattice.toSupSet.{u4} (Submonoid.{u4} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u4} M _inst_1)) ι S))
 Case conversion may be inaccurate. Consider using '#align submonoid.comap_supr_map_of_injective Submonoid.comap_supᵢ_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_supᵢ_map_of_injective (S : ι → Submonoid M) : (⨆ i, (S i).map f).comap f = supᵢ S :=
@@ -684,7 +684,7 @@ theorem comap_supᵢ_map_of_injective (S : ι → Submonoid M) : (⨆ i, (S i).m
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (forall {S : Submonoid.{u1} M _inst_1} {T : Submonoid.{u1} M _inst_1}, Iff (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toLE.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T)) (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S T))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall {S : Submonoid.{u3} M _inst_1} {T : Submonoid.{u3} M _inst_1}, Iff (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toLE.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2))))) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f T)) (LE.le.{u3} (Submonoid.{u3} M _inst_1) (Preorder.toLE.{u3} (Submonoid.{u3} M _inst_1) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1))))) S T))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall {S : Submonoid.{u3} M _inst_1} {T : Submonoid.{u3} M _inst_1}, Iff (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toLE.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2))))) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f T)) (LE.le.{u3} (Submonoid.{u3} M _inst_1) (Preorder.toLE.{u3} (Submonoid.{u3} M _inst_1) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1))))) S T))
 Case conversion may be inaccurate. Consider using '#align submonoid.map_le_map_iff_of_injective Submonoid.map_le_map_iff_of_injectiveₓ'. -/
 @[to_additive]
 theorem map_le_map_iff_of_injective {S T : Submonoid M} : S.map f ≤ T.map f ↔ S ≤ T :=
@@ -696,7 +696,7 @@ theorem map_le_map_iff_of_injective {S T : Submonoid M} : S.map f ≤ T.map f 
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (StrictMono.{u1, u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (StrictMono.{u3, u2} (Submonoid.{u3} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (StrictMono.{u3, u2} (Submonoid.{u3} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f))
 Case conversion may be inaccurate. Consider using '#align submonoid.map_strict_mono_of_injective Submonoid.map_strictMono_of_injectiveₓ'. -/
 @[to_additive]
 theorem map_strictMono_of_injective : StrictMono (map f) :=
@@ -716,7 +716,7 @@ include hf
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (GaloisInsertion.{u1, u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{succ u3, succ u1, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 mc)) f)) -> (GaloisInsertion.{u1, u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{succ u3, succ u1, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 mc)) f)) -> (GaloisInsertion.{u1, u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
 Case conversion may be inaccurate. Consider using '#align submonoid.gi_map_comap Submonoid.giMapComapₓ'. -/
 /-- `map f` and `comap f` form a `galois_insertion` when `f` is surjective. -/
 @[to_additive " `map f` and `comap f` form a `galois_insertion` when `f` is surjective. "]
@@ -731,7 +731,7 @@ def giMapComap : GaloisInsertion (map f) (comap f) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (forall (S : Submonoid.{u2} N _inst_2), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)) S)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} N _inst_2), Eq.{succ u3} (Submonoid.{u3} N _inst_2) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S)) S)
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} N _inst_2), Eq.{succ u3} (Submonoid.{u3} N _inst_2) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S)) S)
 Case conversion may be inaccurate. Consider using '#align submonoid.map_comap_eq_of_surjective Submonoid.map_comap_eq_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_comap_eq_of_surjective (S : Submonoid N) : (S.comap f).map f = S :=
@@ -743,7 +743,7 @@ theorem map_comap_eq_of_surjective (S : Submonoid N) : (S.comap f).map f = S :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (Function.Surjective.{succ u1, succ u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (Function.Surjective.{succ u3, succ u2} (Submonoid.{u3} M _inst_1) (Submonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (Function.Surjective.{succ u3, succ u2} (Submonoid.{u3} M _inst_1) (Submonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f))
 Case conversion may be inaccurate. Consider using '#align submonoid.map_surjective_of_surjective Submonoid.map_surjective_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_surjective_of_surjective : Function.Surjective (map f) :=
@@ -755,7 +755,7 @@ theorem map_surjective_of_surjective : Function.Surjective (map f) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (Function.Injective.{succ u2, succ u1} (Submonoid.{u2} N _inst_2) (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (Function.Injective.{succ u3, succ u2} (Submonoid.{u3} N _inst_2) (Submonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (Function.Injective.{succ u3, succ u2} (Submonoid.{u3} N _inst_2) (Submonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f))
 Case conversion may be inaccurate. Consider using '#align submonoid.comap_injective_of_surjective Submonoid.comap_injective_of_surjectiveₓ'. -/
 @[to_additive]
 theorem comap_injective_of_surjective : Function.Injective (comap f) :=
@@ -767,7 +767,7 @@ theorem comap_injective_of_surjective : Function.Injective (comap f) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (forall (S : Submonoid.{u2} N _inst_2) (T : Submonoid.{u2} N _inst_2), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Inf.inf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasInf.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))) (Inf.inf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasInf.{u2} N _inst_2) S T))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} N _inst_2) (T : Submonoid.{u3} N _inst_2), Eq.{succ u3} (Submonoid.{u3} N _inst_2) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Inf.inf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instInfSubmonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f T))) (Inf.inf.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instInfSubmonoid.{u3} N _inst_2) S T))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} N _inst_2) (T : Submonoid.{u3} N _inst_2), Eq.{succ u3} (Submonoid.{u3} N _inst_2) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Inf.inf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instInfSubmonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f T))) (Inf.inf.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instInfSubmonoid.{u3} N _inst_2) S T))
 Case conversion may be inaccurate. Consider using '#align submonoid.map_inf_comap_of_surjective Submonoid.map_inf_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_inf_comap_of_surjective (S T : Submonoid N) : (S.comap f ⊓ T.comap f).map f = S ⊓ T :=
@@ -779,7 +779,7 @@ theorem map_inf_comap_of_surjective (S T : Submonoid N) : (S.comap f ⊓ T.comap
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {ι : Type.{u4}} {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (forall (S : ι -> (Submonoid.{u2} N _inst_2)), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (infᵢ.{u1, succ u4} (Submonoid.{u1} M _inst_1) (Submonoid.hasInf.{u1} M _inst_1) ι (fun (i : ι) => Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (S i)))) (infᵢ.{u2, succ u4} (Submonoid.{u2} N _inst_2) (Submonoid.hasInf.{u2} N _inst_2) ι S))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u4}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u4} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u3, u4} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Surjective.{succ u3, succ u4} M N (FunLike.coe.{succ u2, succ u3, succ u4} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u2, u3, u4} F M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u4} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u3, u4} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} N _inst_2)), Eq.{succ u4} (Submonoid.{u4} N _inst_2) (Submonoid.map.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (infᵢ.{u3, succ u1} (Submonoid.{u3} M _inst_1) (Submonoid.instInfSetSubmonoid.{u3} M _inst_1) ι (fun (i : ι) => Submonoid.comap.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (S i)))) (infᵢ.{u4, succ u1} (Submonoid.{u4} N _inst_2) (Submonoid.instInfSetSubmonoid.{u4} N _inst_2) ι S))
+  forall {M : Type.{u3}} {N : Type.{u4}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u4} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u3, u4} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Surjective.{succ u3, succ u4} M N (FunLike.coe.{succ u2, succ u3, succ u4} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u2, u3, u4} F M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u4} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u3, u4} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} N _inst_2)), Eq.{succ u4} (Submonoid.{u4} N _inst_2) (Submonoid.map.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (infᵢ.{u3, succ u1} (Submonoid.{u3} M _inst_1) (Submonoid.instInfSetSubmonoid.{u3} M _inst_1) ι (fun (i : ι) => Submonoid.comap.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (S i)))) (infᵢ.{u4, succ u1} (Submonoid.{u4} N _inst_2) (Submonoid.instInfSetSubmonoid.{u4} N _inst_2) ι S))
 Case conversion may be inaccurate. Consider using '#align submonoid.map_infi_comap_of_surjective Submonoid.map_infᵢ_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_infᵢ_comap_of_surjective (S : ι → Submonoid N) : (⨅ i, (S i).comap f).map f = infᵢ S :=
@@ -791,7 +791,7 @@ theorem map_infᵢ_comap_of_surjective (S : ι → Submonoid N) : (⨅ i, (S i).
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (forall (S : Submonoid.{u2} N _inst_2) (T : Submonoid.{u2} N _inst_2), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Sup.sup.{u1} (Submonoid.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Submonoid.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.completeLattice.{u1} M _inst_1)))) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))) (Sup.sup.{u2} (Submonoid.{u2} N _inst_2) (SemilatticeSup.toHasSup.{u2} (Submonoid.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.completeLattice.{u2} N _inst_2)))) S T))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} N _inst_2) (T : Submonoid.{u3} N _inst_2), Eq.{succ u3} (Submonoid.{u3} N _inst_2) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Sup.sup.{u2} (Submonoid.{u2} M _inst_1) (SemilatticeSup.toSup.{u2} (Submonoid.{u2} M _inst_1) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1)))) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f T))) (Sup.sup.{u3} (Submonoid.{u3} N _inst_2) (SemilatticeSup.toSup.{u3} (Submonoid.{u3} N _inst_2) (Lattice.toSemilatticeSup.{u3} (Submonoid.{u3} N _inst_2) (CompleteLattice.toLattice.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2)))) S T))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} N _inst_2) (T : Submonoid.{u3} N _inst_2), Eq.{succ u3} (Submonoid.{u3} N _inst_2) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Sup.sup.{u2} (Submonoid.{u2} M _inst_1) (SemilatticeSup.toSup.{u2} (Submonoid.{u2} M _inst_1) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1)))) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f T))) (Sup.sup.{u3} (Submonoid.{u3} N _inst_2) (SemilatticeSup.toSup.{u3} (Submonoid.{u3} N _inst_2) (Lattice.toSemilatticeSup.{u3} (Submonoid.{u3} N _inst_2) (CompleteLattice.toLattice.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2)))) S T))
 Case conversion may be inaccurate. Consider using '#align submonoid.map_sup_comap_of_surjective Submonoid.map_sup_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_sup_comap_of_surjective (S T : Submonoid N) : (S.comap f ⊔ T.comap f).map f = S ⊔ T :=
@@ -803,7 +803,7 @@ theorem map_sup_comap_of_surjective (S T : Submonoid N) : (S.comap f ⊔ T.comap
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {ι : Type.{u4}} {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (forall (S : ι -> (Submonoid.{u2} N _inst_2)), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (supᵢ.{u1, succ u4} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.completeLattice.{u1} M _inst_1))) ι (fun (i : ι) => Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (S i)))) (supᵢ.{u2, succ u4} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeSup.toHasSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.completeLattice.{u2} N _inst_2))) ι S))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u4}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u4} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u3, u4} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Surjective.{succ u3, succ u4} M N (FunLike.coe.{succ u2, succ u3, succ u4} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u2, u3, u4} F M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u4} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u3, u4} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} N _inst_2)), Eq.{succ u4} (Submonoid.{u4} N _inst_2) (Submonoid.map.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (supᵢ.{u3, succ u1} (Submonoid.{u3} M _inst_1) (CompleteLattice.toSupSet.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1)) ι (fun (i : ι) => Submonoid.comap.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (S i)))) (supᵢ.{u4, succ u1} (Submonoid.{u4} N _inst_2) (CompleteLattice.toSupSet.{u4} (Submonoid.{u4} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u4} N _inst_2)) ι S))
+  forall {M : Type.{u3}} {N : Type.{u4}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u4} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u3, u4} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Surjective.{succ u3, succ u4} M N (FunLike.coe.{succ u2, succ u3, succ u4} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u2, u3, u4} F M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u4} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u3, u4} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} N _inst_2)), Eq.{succ u4} (Submonoid.{u4} N _inst_2) (Submonoid.map.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (supᵢ.{u3, succ u1} (Submonoid.{u3} M _inst_1) (CompleteLattice.toSupSet.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1)) ι (fun (i : ι) => Submonoid.comap.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (S i)))) (supᵢ.{u4, succ u1} (Submonoid.{u4} N _inst_2) (CompleteLattice.toSupSet.{u4} (Submonoid.{u4} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u4} N _inst_2)) ι S))
 Case conversion may be inaccurate. Consider using '#align submonoid.map_supr_comap_of_surjective Submonoid.map_supᵢ_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_supᵢ_comap_of_surjective (S : ι → Submonoid N) : (⨆ i, (S i).comap f).map f = supᵢ S :=
@@ -815,7 +815,7 @@ theorem map_supᵢ_comap_of_surjective (S : ι → Submonoid N) : (⨆ i, (S i).
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (forall {S : Submonoid.{u2} N _inst_2} {T : Submonoid.{u2} N _inst_2}, Iff (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T)) (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toLE.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) S T))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall {S : Submonoid.{u3} N _inst_2} {T : Submonoid.{u3} N _inst_2}, Iff (LE.le.{u2} (Submonoid.{u2} M _inst_1) (Preorder.toLE.{u2} (Submonoid.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1))))) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f T)) (LE.le.{u3} (Submonoid.{u3} N _inst_2) (Preorder.toLE.{u3} (Submonoid.{u3} N _inst_2) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2))))) S T))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall {S : Submonoid.{u3} N _inst_2} {T : Submonoid.{u3} N _inst_2}, Iff (LE.le.{u2} (Submonoid.{u2} M _inst_1) (Preorder.toLE.{u2} (Submonoid.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1))))) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f T)) (LE.le.{u3} (Submonoid.{u3} N _inst_2) (Preorder.toLE.{u3} (Submonoid.{u3} N _inst_2) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2))))) S T))
 Case conversion may be inaccurate. Consider using '#align submonoid.comap_le_comap_iff_of_surjective Submonoid.comap_le_comap_iff_of_surjectiveₓ'. -/
 @[to_additive]
 theorem comap_le_comap_iff_of_surjective {S T : Submonoid N} : S.comap f ≤ T.comap f ↔ S ≤ T :=
@@ -827,7 +827,7 @@ theorem comap_le_comap_iff_of_surjective {S T : Submonoid N} : S.comap f ≤ T.c
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (StrictMono.{u2, u1} (Submonoid.{u2} N _inst_2) (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2))) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (StrictMono.{u3, u2} (Submonoid.{u3} N _inst_2) (Submonoid.{u2} M _inst_1) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2)))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1)))) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (StrictMono.{u3, u2} (Submonoid.{u3} N _inst_2) (Submonoid.{u2} M _inst_1) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2)))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1)))) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f))
 Case conversion may be inaccurate. Consider using '#align submonoid.comap_strict_mono_of_surjective Submonoid.comap_strictMono_of_surjectiveₓ'. -/
 @[to_additive]
 theorem comap_strictMono_of_surjective : StrictMono (comap f) :=
@@ -1031,7 +1031,7 @@ def Subtype : S' →* M :=
 lean 3 declaration is
   forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {A : Type.{u2}} [_inst_4 : SetLike.{u2, u1} A M] [hA : SubmonoidClass.{u2, u1} A M _inst_1 _inst_4] (S' : A), Eq.{succ u1} ((fun (_x : MonoidHom.{u1, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') M (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 A _inst_4 hA S') _inst_1) => (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') -> M) (SubmonoidClass.Subtype.{u1, u2} M _inst_1 A _inst_4 hA S')) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') M (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 A _inst_4 hA S') _inst_1) (fun (_x : MonoidHom.{u1, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') M (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 A _inst_4 hA S') _inst_1) => (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') -> M) (MonoidHom.hasCoeToFun.{u1, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') M (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 A _inst_4 hA S') _inst_1) (SubmonoidClass.Subtype.{u1, u2} M _inst_1 A _inst_4 hA S')) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') M (coeBase.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_4) x S'))))))
 but is expected to have type
-  forall {M : Type.{u2}} [_inst_1 : MulOneClass.{u2} M] {A : Type.{u1}} [_inst_4 : SetLike.{u1, u2} A M] [hA : SubmonoidClass.{u1, u2} A M _inst_1 _inst_4] (S' : A), Eq.{succ u2} (forall (a : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) => M) a) (FunLike.coe.{succ u2, succ u2, succ u2} (MonoidHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) => M) _x) (MulHomClass.toFunLike.{u2, u2, u2} (MonoidHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (MulOneClass.toMul.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S')) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{u2, u2, u2} (MonoidHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1 (MonoidHom.monoidHomClass.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1))) (SubmonoidClass.Subtype.{u2, u1} M _inst_1 A _inst_4 hA S')) (Subtype.val.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S'))
+  forall {M : Type.{u2}} [_inst_1 : MulOneClass.{u2} M] {A : Type.{u1}} [_inst_4 : SetLike.{u1, u2} A M] [hA : SubmonoidClass.{u1, u2} A M _inst_1 _inst_4] (S' : A), Eq.{succ u2} (forall (a : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) => M) a) (FunLike.coe.{succ u2, succ u2, succ u2} (MonoidHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) => M) _x) (MulHomClass.toFunLike.{u2, u2, u2} (MonoidHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (MulOneClass.toMul.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S')) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{u2, u2, u2} (MonoidHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1 (MonoidHom.monoidHomClass.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1))) (SubmonoidClass.Subtype.{u2, u1} M _inst_1 A _inst_4 hA S')) (Subtype.val.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S'))
 Case conversion may be inaccurate. Consider using '#align submonoid_class.coe_subtype SubmonoidClass.coe_subtypeₓ'. -/
 @[simp, to_additive]
 theorem coe_subtype : (SubmonoidClass.Subtype S' : S' → M) = coe :=
@@ -1275,7 +1275,7 @@ def subtype : S →* M :=
 lean 3 declaration is
   forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1), Eq.{succ u1} ((coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) -> M) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) (fun (_x : MonoidHom.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) => (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) -> M) (MonoidHom.hasCoeToFun.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) (Submonoid.subtype.{u1} M _inst_1 S)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S))))))
 but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1), Eq.{succ u1} (forall (ᾰ : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) => M) ᾰ) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (fun (_x : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (MulOneClass.toMul.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u1} M _inst_1 S)) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1 (MonoidHom.monoidHomClass.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1))) (Submonoid.subtype.{u1} M _inst_1 S)) (Subtype.val.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S))
+  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1), Eq.{succ u1} (forall (ᾰ : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) => M) ᾰ) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (fun (_x : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (MulOneClass.toMul.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u1} M _inst_1 S)) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1 (MonoidHom.monoidHomClass.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1))) (Submonoid.subtype.{u1} M _inst_1 S)) (Subtype.val.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S))
 Case conversion may be inaccurate. Consider using '#align submonoid.coe_subtype Submonoid.coe_subtypeₓ'. -/
 @[simp, to_additive]
 theorem coe_subtype : ⇑S.Subtype = coe :=
@@ -1316,7 +1316,7 @@ theorem topEquiv_toMonoidHom : (topEquiv : _ ≃* M).toMonoidHom = (⊤ : Submon
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (S : Submonoid.{u1} M _inst_1) (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), (Function.Injective.{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)) -> (MulEquiv.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (S : Submonoid.{u1} M _inst_1) (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), (Function.Injective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, 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 u1 u2, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u1 u2, 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))) f)) -> (MulEquiv.{u1, u2} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (S : Submonoid.{u1} M _inst_1) (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), (Function.Injective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, 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 u1 u2, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u1 u2, 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))) f)) -> (MulEquiv.{u1, u2} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)))
 Case conversion may be inaccurate. Consider using '#align submonoid.equiv_map_of_injective Submonoid.equivMapOfInjectiveₓ'. -/
 /-- A subgroup is isomorphic to its image under an injective function. If you have an isomorphism,
 use `mul_equiv.submonoid_map` for better definitional equalities. -/
@@ -1331,7 +1331,7 @@ noncomputable def equivMapOfInjective (f : M →* N) (hf : Function.Injective f)
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (S : Submonoid.{u1} M _inst_1) (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2) (hf : Function.Injective.{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)) (x : coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S), Eq.{succ u2} N ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)))))) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MulEquiv.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S))) (fun (_x : MulEquiv.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S))) => (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) -> (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S))) (MulEquiv.hasCoeToFun.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S))) (Submonoid.equivMapOfInjective.{u1, u2} M N _inst_1 _inst_2 S f hf) 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 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S))))) x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (S : Submonoid.{u2} M _inst_1) (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2) (hf : Function.Injective.{succ u2, succ u1} M N (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 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)), Eq.{succ u1} N (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (MulOneClass.toMul.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u2} M _inst_1 S)) (MulOneClass.toMul.{u1} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.toMulOneClass.{u2} M _inst_1 S) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S)) (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.toMulOneClass.{u2} M _inst_1 S) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S)) (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S)))))) (Submonoid.equivMapOfInjective.{u2, u1} M N _inst_1 _inst_2 S f hf) 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 (Subtype.val.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Set.{u2} M) (Set.instMembershipSet.{u2} M) x (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) x))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (S : Submonoid.{u2} M _inst_1) (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2) (hf : Function.Injective.{succ u2, succ u1} M N (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 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)), Eq.{succ u1} N (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (MulOneClass.toMul.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u2} M _inst_1 S)) (MulOneClass.toMul.{u1} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.toMulOneClass.{u2} M _inst_1 S) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S)) (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.toMulOneClass.{u2} M _inst_1 S) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S)) (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S)))))) (Submonoid.equivMapOfInjective.{u2, u1} M N _inst_1 _inst_2 S f hf) 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 (Subtype.val.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Set.{u2} M) (Set.instMembershipSet.{u2} M) x (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) x))
 Case conversion may be inaccurate. Consider using '#align submonoid.coe_equiv_map_of_injective_apply Submonoid.coe_equivMapOfInjective_applyₓ'. -/
 @[simp, to_additive]
 theorem coe_equivMapOfInjective_apply (f : M →* N) (hf : Function.Injective f) (x : S) :
@@ -1528,7 +1528,7 @@ theorem prod_bot_sup_bot_prod (s : Submonoid M) (t : Submonoid N) :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {f : MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)} {K : Submonoid.{u1} M _inst_1} {x : N}, Iff (Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 f) K)) (Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (fun (_x : MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) => N -> M) (MulEquiv.hasCoeToFun.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (MulEquiv.symm.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) f) x) K)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {f : MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)} {K : Submonoid.{u2} M _inst_1} {x : N}, Iff (Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 f) K)) (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : N) => M) x) (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : N) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) f) x) K)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {f : MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)} {K : Submonoid.{u2} M _inst_1} {x : N}, Iff (Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 f) K)) (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : N) => M) x) (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : N) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) f) x) K)
 Case conversion may be inaccurate. Consider using '#align submonoid.mem_map_equiv Submonoid.mem_map_equivₓ'. -/
 @[to_additive]
 theorem mem_map_equiv {f : M ≃* N} {K : Submonoid M} {x : N} :
@@ -1682,7 +1682,7 @@ def mrange (f : F) : Submonoid N :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), Eq.{succ u2} (Set.{u2} N) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Submonoid.{u2} N _inst_2) (Set.{u2} N) (HasLiftT.mk.{succ u2, succ u2} (Submonoid.{u2} N _inst_2) (Set.{u2} N) (CoeTCₓ.coe.{succ u2, succ u2} (Submonoid.{u2} N _inst_2) (Set.{u2} N) (SetLike.Set.hasCoeT.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) (MonoidHom.mrange.{u1, u2, u3} M N _inst_1 _inst_2 F mc f)) (Set.range.{u2, succ u1} N M (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 mc))) f))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] (f : F), Eq.{succ u3} (Set.{u3} N) (SetLike.coe.{u3, u3} (Submonoid.{u3} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u3} N _inst_2) (MonoidHom.mrange.{u2, u3, u1} M N _inst_1 _inst_2 F mc f)) (Set.range.{u3, succ u2} N M (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] (f : F), Eq.{succ u3} (Set.{u3} N) (SetLike.coe.{u3, u3} (Submonoid.{u3} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u3} N _inst_2) (MonoidHom.mrange.{u2, u3, u1} M N _inst_1 _inst_2 F mc f)) (Set.range.{u3, succ u2} N M (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_mrange MonoidHom.coe_mrangeₓ'. -/
 @[simp, to_additive]
 theorem coe_mrange (f : F) : (mrange f : Set N) = Set.range f :=
@@ -1694,7 +1694,7 @@ theorem coe_mrange (f : F) : (mrange f : Set N) = Set.range f :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F} {y : N}, Iff (Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) y (MonoidHom.mrange.{u1, u2, u3} M N _inst_1 _inst_2 F mc f)) (Exists.{succ u1} M (fun (x : 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 (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 mc))) f x) y))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F} {y : N}, Iff (Membership.mem.{u3, u3} N (Submonoid.{u3} N _inst_2) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u3} N _inst_2)) y (MonoidHom.mrange.{u2, u3, u1} M N _inst_1 _inst_2 F mc f)) (Exists.{succ u2} M (fun (x : M) => Eq.{succ u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f x) y))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F} {y : N}, Iff (Membership.mem.{u3, u3} N (Submonoid.{u3} N _inst_2) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u3} N _inst_2)) y (MonoidHom.mrange.{u2, u3, u1} M N _inst_1 _inst_2 F mc f)) (Exists.{succ u2} M (fun (x : M) => Eq.{succ u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f x) y))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.mem_mrange MonoidHom.mem_mrangeₓ'. -/
 @[simp, to_additive]
 theorem mem_mrange {f : F} {y : N} : y ∈ mrange f ↔ ∃ x, f x = y :=
@@ -1734,7 +1734,7 @@ include mc
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, Iff (Eq.{succ u2} (Submonoid.{u2} N _inst_2) (MonoidHom.mrange.{u1, u2, u3} M N _inst_1 _inst_2 F mc f) (Top.top.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasTop.{u2} N _inst_2))) (Function.Surjective.{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) (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 mc))) f))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, Iff (Eq.{succ u3} (Submonoid.{u3} N _inst_2) (MonoidHom.mrange.{u2, u3, u1} M N _inst_1 _inst_2 F mc f) (Top.top.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instTopSubmonoid.{u3} N _inst_2))) (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, Iff (Eq.{succ u3} (Submonoid.{u3} N _inst_2) (MonoidHom.mrange.{u2, u3, u1} M N _inst_1 _inst_2 F mc f) (Top.top.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instTopSubmonoid.{u3} N _inst_2))) (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.mrange_top_iff_surjective MonoidHom.mrange_top_iff_surjectiveₓ'. -/
 @[to_additive]
 theorem mrange_top_iff_surjective {f : F} : mrange f = (⊤ : Submonoid N) ↔ Function.Surjective f :=
@@ -1746,7 +1746,7 @@ theorem mrange_top_iff_surjective {f : F} : mrange f = (⊤ : Submonoid N) ↔ F
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), (Function.Surjective.{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) (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 mc))) f)) -> (Eq.{succ u2} (Submonoid.{u2} N _inst_2) (MonoidHom.mrange.{u1, u2, u3} M N _inst_1 _inst_2 F mc f) (Top.top.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasTop.{u2} N _inst_2)))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F), (Function.Surjective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (Eq.{succ u2} (Submonoid.{u2} N _inst_2) (MonoidHom.mrange.{u3, u2, u1} M N _inst_1 _inst_2 F mc f) (Top.top.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instTopSubmonoid.{u2} N _inst_2)))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F), (Function.Surjective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (Eq.{succ u2} (Submonoid.{u2} N _inst_2) (MonoidHom.mrange.{u3, u2, u1} M N _inst_1 _inst_2 F mc f) (Top.top.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instTopSubmonoid.{u2} N _inst_2)))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.mrange_top_of_surjective MonoidHom.mrange_top_of_surjectiveₓ'. -/
 /-- The range of a surjective monoid hom is the whole of the codomain. -/
 @[to_additive "The range of a surjective `add_monoid` hom is the whole of the codomain."]
@@ -1760,7 +1760,7 @@ theorem mrange_top_of_surjective (f : F) (hf : Function.Surjective f) :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F) (s : Set.{u2} N), LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) (Submonoid.closure.{u1} M _inst_1 (Set.preimage.{u1, 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) (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 mc))) f) s)) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Submonoid.closure.{u2} N _inst_2 s))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] (f : F) (s : Set.{u3} N), LE.le.{u2} (Submonoid.{u2} M _inst_1) (Preorder.toLE.{u2} (Submonoid.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1))))) (Submonoid.closure.{u2} M _inst_1 (Set.preimage.{u2, u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f) s)) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Submonoid.closure.{u3} N _inst_2 s))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] (f : F) (s : Set.{u3} N), LE.le.{u2} (Submonoid.{u2} M _inst_1) (Preorder.toLE.{u2} (Submonoid.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1))))) (Submonoid.closure.{u2} M _inst_1 (Set.preimage.{u2, u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f) s)) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Submonoid.closure.{u3} N _inst_2 s))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.mclosure_preimage_le MonoidHom.mclosure_preimage_leₓ'. -/
 @[to_additive]
 theorem mclosure_preimage_le (f : F) (s : Set N) : closure (f ⁻¹' s) ≤ (closure s).comap f :=
@@ -1772,7 +1772,7 @@ theorem mclosure_preimage_le (f : F) (s : Set N) : closure (f ⁻¹' s) ≤ (clo
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F) (s : Set.{u1} M), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Submonoid.closure.{u1} M _inst_1 s)) (Submonoid.closure.{u2} N _inst_2 (Set.image.{u1, 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) (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 mc))) f) s))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) (s : Set.{u3} M), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Submonoid.closure.{u3} M _inst_1 s)) (Submonoid.closure.{u2} N _inst_2 (Set.image.{u3, u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f) s))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) (s : Set.{u3} M), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Submonoid.closure.{u3} M _inst_1 s)) (Submonoid.closure.{u2} N _inst_2 (Set.image.{u3, u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f) s))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_mclosure MonoidHom.map_mclosureₓ'. -/
 /-- The image under a monoid hom of the submonoid generated by a set equals the submonoid generated
     by the image of the set. -/
@@ -1802,7 +1802,7 @@ def restrict {N S : Type _} [MulOneClass N] [SetLike S M] [SubmonoidClass S M] (
 lean 3 declaration is
   forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {N : Type.{u2}} {S : Type.{u3}} [_inst_4 : MulOneClass.{u2} N] [_inst_5 : SetLike.{u3, u1} S M] [_inst_6 : SubmonoidClass.{u3, u1} S M _inst_1 _inst_5] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_4) (s : S) (x : coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s) N (SubmonoidClass.toMulOneClass.{u1, u3} M _inst_1 S _inst_5 _inst_6 s) _inst_4) (fun (_x : MonoidHom.{u1, u2} (coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s) N (SubmonoidClass.toMulOneClass.{u1, u3} M _inst_1 S _inst_5 _inst_6 s) _inst_4) => (coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s) -> N) (MonoidHom.hasCoeToFun.{u1, u2} (coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s) N (SubmonoidClass.toMulOneClass.{u1, u3} M _inst_1 S _inst_5 _inst_6 s) _inst_4) (MonoidHom.restrict.{u1, u2, u3} M _inst_1 N S _inst_4 _inst_5 _inst_6 f s) x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_4) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_4) f ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s) M (coeBase.{succ u1, succ u1} (coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u3} M S (SetLike.hasMem.{u3, u1} S M _inst_5) x s))))) x))
 but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {N : Type.{u3}} {S : Type.{u2}} [_inst_4 : MulOneClass.{u3} N] [_inst_5 : SetLike.{u2, u1} S M] [_inst_6 : SubmonoidClass.{u2, u1} S M _inst_1 _inst_5] (f : MonoidHom.{u1, u3} M N _inst_1 _inst_4) (s : S) (x : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)), Eq.{succ u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) => N) x) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (MonoidHom.{u1, u3} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) (fun (_x : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) => N) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} (MonoidHom.{u1, u3} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (MulOneClass.toMul.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s)) (MulOneClass.toMul.{u3} N _inst_4) (MonoidHomClass.toMulHomClass.{max u1 u3, u1, u3} (MonoidHom.{u1, u3} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4 (MonoidHom.monoidHomClass.{u1, u3} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4))) (MonoidHom.restrict.{u1, u3, u2} M _inst_1 N S _inst_4 _inst_5 _inst_6 f s) x) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (MonoidHom.{u1, u3} M N _inst_1 _inst_4) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} (MonoidHom.{u1, u3} M N _inst_1 _inst_4) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u3} N _inst_4) (MonoidHomClass.toMulHomClass.{max u1 u3, u1, u3} (MonoidHom.{u1, u3} M N _inst_1 _inst_4) M N _inst_1 _inst_4 (MonoidHom.monoidHomClass.{u1, u3} M N _inst_1 _inst_4))) f (Subtype.val.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) x (SetLike.coe.{u2, u1} S M _inst_5 s)) x))
+  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {N : Type.{u3}} {S : Type.{u2}} [_inst_4 : MulOneClass.{u3} N] [_inst_5 : SetLike.{u2, u1} S M] [_inst_6 : SubmonoidClass.{u2, u1} S M _inst_1 _inst_5] (f : MonoidHom.{u1, u3} M N _inst_1 _inst_4) (s : S) (x : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)), Eq.{succ u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) => N) x) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (MonoidHom.{u1, u3} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) (fun (_x : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) => N) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} (MonoidHom.{u1, u3} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (MulOneClass.toMul.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s)) (MulOneClass.toMul.{u3} N _inst_4) (MonoidHomClass.toMulHomClass.{max u1 u3, u1, u3} (MonoidHom.{u1, u3} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4 (MonoidHom.monoidHomClass.{u1, u3} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4))) (MonoidHom.restrict.{u1, u3, u2} M _inst_1 N S _inst_4 _inst_5 _inst_6 f s) x) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (MonoidHom.{u1, u3} M N _inst_1 _inst_4) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} (MonoidHom.{u1, u3} M N _inst_1 _inst_4) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u3} N _inst_4) (MonoidHomClass.toMulHomClass.{max u1 u3, u1, u3} (MonoidHom.{u1, u3} M N _inst_1 _inst_4) M N _inst_1 _inst_4 (MonoidHom.monoidHomClass.{u1, u3} M N _inst_1 _inst_4))) f (Subtype.val.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) x (SetLike.coe.{u2, u1} S M _inst_5 s)) x))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.restrict_apply MonoidHom.restrict_applyₓ'. -/
 @[simp, to_additive]
 theorem restrict_apply {N S : Type _} [MulOneClass N] [SetLike S M] [SubmonoidClass S M]
@@ -1828,7 +1828,7 @@ theorem restrict_mrange (f : M →* N) : (f.restrict S).mrange = S.map f := by
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {S : Type.{u3}} [_inst_4 : SetLike.{u3, u2} S N] [_inst_5 : SubmonoidClass.{u3, u2} S N _inst_2 _inst_4] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2) (s : S), (forall (x : M), Membership.Mem.{u2, u3} N S (SetLike.hasMem.{u3, u2} S N _inst_4) (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) s) -> (MonoidHom.{u1, u2} M (coeSort.{succ u3, succ (succ u2)} S Type.{u2} (SetLike.hasCoeToSort.{u3, u2} S N _inst_4) s) _inst_1 (SubmonoidClass.toMulOneClass.{u2, u3} N _inst_2 S _inst_4 _inst_5 s))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {S : Type.{u3}} [_inst_4 : SetLike.{u3, u2} S N] [_inst_5 : SubmonoidClass.{u3, u2} S N _inst_2 _inst_4] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2) (s : S), (forall (x : M), Membership.mem.{u2, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) S (SetLike.instMembership.{u3, u2} S N _inst_4) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, 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 u1 u2, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u1 u2, 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))) f x) s) -> (MonoidHom.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u3} N S (SetLike.instMembership.{u3, u2} S N _inst_4) x s)) _inst_1 (SubmonoidClass.toMulOneClass.{u2, u3} N _inst_2 S _inst_4 _inst_5 s))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {S : Type.{u3}} [_inst_4 : SetLike.{u3, u2} S N] [_inst_5 : SubmonoidClass.{u3, u2} S N _inst_2 _inst_4] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2) (s : S), (forall (x : M), Membership.mem.{u2, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) S (SetLike.instMembership.{u3, u2} S N _inst_4) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, 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 u1 u2, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u1 u2, 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))) f x) s) -> (MonoidHom.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u3} N S (SetLike.instMembership.{u3, u2} S N _inst_4) x s)) _inst_1 (SubmonoidClass.toMulOneClass.{u2, u3} N _inst_2 S _inst_4 _inst_5 s))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.cod_restrict MonoidHom.codRestrictₓ'. -/
 /-- Restriction of a monoid hom to a submonoid of the codomain. -/
 @[to_additive "Restriction of an `add_monoid` hom to an `add_submonoid` of the codomain.",
@@ -1858,7 +1858,7 @@ def mrangeRestrict {N} [MulOneClass N] (f : M →* N) : M →* f.mrange :=
 lean 3 declaration is
   forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {N : Type.{u2}} [_inst_4 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_4) (x : M), Eq.{succ u2} N ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_4) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_4) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_4) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_4) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)))))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_4) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (fun (_x : MonoidHom.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_4) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) => M -> (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_4) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (MonoidHom.hasCoeToFun.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_4) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (MonoidHom.mrangeRestrict.{u1, u2} M _inst_1 N _inst_4 f) x)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_4) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_4) f x)
 but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {N : Type.{u2}} [_inst_4 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_4) (x : M), Eq.{succ u2} N (Subtype.val.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Set.{u2} N) (Set.instMembershipSet.{u2} N) x (SetLike.coe.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4) (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) (MonoidHom.monoidHomClass.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))))) (MonoidHom.mrangeRestrict.{u1, u2} M _inst_1 N _inst_4 f) x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_4) 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 _inst_1 _inst_4) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_4) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_4) M N _inst_1 _inst_4 (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4))) f x)
+  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {N : Type.{u2}} [_inst_4 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_4) (x : M), Eq.{succ u2} N (Subtype.val.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Set.{u2} N) (Set.instMembershipSet.{u2} N) x (SetLike.coe.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4) (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) (MonoidHom.monoidHomClass.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))))) (MonoidHom.mrangeRestrict.{u1, u2} M _inst_1 N _inst_4 f) x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_4) 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 _inst_1 _inst_4) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_4) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_4) M N _inst_1 _inst_4 (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4))) f x)
 Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_mrange_restrict MonoidHom.coe_mrangeRestrictₓ'. -/
 @[simp, to_additive]
 theorem coe_mrangeRestrict {N} [MulOneClass N] (f : M →* N) (x : M) :
@@ -1871,7 +1871,7 @@ theorem coe_mrangeRestrict {N} [MulOneClass N] (f : M →* N) (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), Function.Surjective.{succ u1, succ u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_2 (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f))) (fun (_x : MonoidHom.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_2 (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f))) => M -> (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f))) (MonoidHom.hasCoeToFun.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_2 (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f))) (MonoidHom.mrangeRestrict.{u1, u2} M _inst_1 N _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), Function.Surjective.{succ u2, succ u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} 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 (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f)) (MonoidHom.monoidHomClass.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))))) (MonoidHom.mrangeRestrict.{u2, u1} M _inst_1 N _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), Function.Surjective.{succ u2, succ u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} 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 (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f)) (MonoidHom.monoidHomClass.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))))) (MonoidHom.mrangeRestrict.{u2, u1} M _inst_1 N _inst_2 f))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.mrange_restrict_surjective MonoidHom.mrangeRestrict_surjectiveₓ'. -/
 @[to_additive]
 theorem mrangeRestrict_surjective (f : M →* N) : Function.Surjective f.mrangeRestrict :=
@@ -1896,7 +1896,7 @@ def mker (f : F) : Submonoid M :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F) {x : M}, Iff (Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x (MonoidHom.mker.{u1, u2, u3} M N _inst_1 _inst_2 F mc 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) (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 mc))) f 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.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) {x : M}, Iff (Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x (MonoidHom.mker.{u3, u2, u1} M N _inst_1 _inst_2 F mc f)) (Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) 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) _inst_2))))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) {x : M}, Iff (Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x (MonoidHom.mker.{u3, u2, u1} M N _inst_1 _inst_2 F mc f)) (Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) 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) _inst_2))))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.mem_mker MonoidHom.mem_mkerₓ'. -/
 @[to_additive]
 theorem mem_mker (f : F) {x : M} : x ∈ mker f ↔ f x = 1 :=
@@ -1908,7 +1908,7 @@ theorem mem_mker (f : F) {x : M} : x ∈ mker f ↔ f x = 1 :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), Eq.{succ u1} (Set.{u1} M) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) (MonoidHom.mker.{u1, u2, u3} M N _inst_1 _inst_2 F mc f)) (Set.preimage.{u1, 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) (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 mc))) f) (Singleton.singleton.{u2, u2} N (Set.{u2} N) (Set.hasSingleton.{u2} N) (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.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F), Eq.{succ u3} (Set.{u3} M) (SetLike.coe.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1) (MonoidHom.mker.{u3, u2, u1} M N _inst_1 _inst_2 F mc f)) (Set.preimage.{u3, u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f) (Singleton.singleton.{u2, u2} N (Set.{u2} N) (Set.instSingletonSet.{u2} N) (OfNat.ofNat.{u2} N 1 (One.toOfNat1.{u2} N (MulOneClass.toOne.{u2} N _inst_2)))))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F), Eq.{succ u3} (Set.{u3} M) (SetLike.coe.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1) (MonoidHom.mker.{u3, u2, u1} M N _inst_1 _inst_2 F mc f)) (Set.preimage.{u3, u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f) (Singleton.singleton.{u2, u2} N (Set.{u2} N) (Set.instSingletonSet.{u2} N) (OfNat.ofNat.{u2} N 1 (One.toOfNat1.{u2} N (MulOneClass.toOne.{u2} N _inst_2)))))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_mker MonoidHom.coe_mkerₓ'. -/
 @[to_additive]
 theorem coe_mker (f : F) : (mker f : Set M) = (f : M → N) ⁻¹' {1} :=
@@ -2090,7 +2090,7 @@ def submonoidMap (f : M →* N) (M' : Submonoid M) : M' →* M'.map 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) (M' : Submonoid.{u1} M _inst_1), Function.Surjective.{succ u1, succ u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) M') (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M')) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) M') (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M')) (Submonoid.toMulOneClass.{u1} M _inst_1 M') (Submonoid.toMulOneClass.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M'))) (fun (_x : MonoidHom.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) M') (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M')) (Submonoid.toMulOneClass.{u1} M _inst_1 M') (Submonoid.toMulOneClass.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M'))) => (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) M') -> (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M'))) (MonoidHom.hasCoeToFun.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) M') (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M')) (Submonoid.toMulOneClass.{u1} M _inst_1 M') (Submonoid.toMulOneClass.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M'))) (MonoidHom.submonoidMap.{u1, u2} M N _inst_1 _inst_2 f M'))
 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) (M' : Submonoid.{u2} M _inst_1), Function.Surjective.{succ u2, succ u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (MulOneClass.toMul.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Submonoid.toMulOneClass.{u2} M _inst_1 M')) (MulOneClass.toMul.{u1} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M')) (MonoidHom.monoidHomClass.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))))) (MonoidHom.submonoidMap.{u2, u1} M N _inst_1 _inst_2 f M'))
+  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) (M' : Submonoid.{u2} M _inst_1), Function.Surjective.{succ u2, succ u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (MulOneClass.toMul.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Submonoid.toMulOneClass.{u2} M _inst_1 M')) (MulOneClass.toMul.{u1} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M')) (MonoidHom.monoidHomClass.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))))) (MonoidHom.submonoidMap.{u2, u1} M N _inst_1 _inst_2 f M'))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.submonoid_map_surjective MonoidHom.submonoidMap_surjectiveₓ'. -/
 @[to_additive]
 theorem submonoidMap_surjective (f : M →* N) (M' : Submonoid M) :
@@ -2331,7 +2331,7 @@ def submonoidCongr (h : S = T) : S ≃* T :=
 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 : N -> M}, (Function.LeftInverse.{succ u1, succ u2} M N 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)) -> (MulEquiv.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)) (MulOneClass.toHasMul.{u1} M _inst_1) (Submonoid.mul.{u2} N _inst_2 (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)))
 but is expected to have type
-  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 : N -> M}, (Function.LeftInverse.{succ u1, succ u2} M N g (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, 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 u1 u2, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u1 u2, 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))) f)) -> (MulEquiv.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f))) (MulOneClass.toMul.{u1} M _inst_1) (Submonoid.mul.{u2} N _inst_2 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)))
+  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 : N -> M}, (Function.LeftInverse.{succ u1, succ u2} M N g (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, 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 u1 u2, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u1 u2, 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))) f)) -> (MulEquiv.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f))) (MulOneClass.toMul.{u1} M _inst_1) (Submonoid.mul.{u2} N _inst_2 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)))
 Case conversion may be inaccurate. Consider using '#align mul_equiv.of_left_inverse' MulEquiv.ofLeftInverse'ₓ'. -/
 -- this name is primed so that the version to `f.range` instead of `f.mrange` can be unprimed.
 /-- A monoid homomorphism `f : M →* N` with a left-inverse `g : N → M` defines a multiplicative
@@ -2373,7 +2373,7 @@ def submonoidMap (e : M ≃* N) (S : Submonoid M) : S ≃* S.map e.toMonoidHom :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (e : MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (S : Submonoid.{u1} M _inst_1) (g : coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S), Eq.{succ u2} N ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)))))) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MulEquiv.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S))) (fun (_x : MulEquiv.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S))) => (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) -> (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S))) (MulEquiv.hasCoeToFun.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S))) (MulEquiv.submonoidMap.{u1, u2} M N _inst_1 _inst_2 e S) g)) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (fun (_x : MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) => M -> N) (MulEquiv.hasCoeToFun.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) e ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S))))) g))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (e : MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) (S : Submonoid.{u2} M _inst_1) (g : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)), Eq.{succ u1} N (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (MulOneClass.toMul.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u2} M _inst_1 S)) (MulOneClass.toMul.{u1} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.toMulOneClass.{u2} M _inst_1 S) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.toMulOneClass.{u2} M _inst_1 S) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)))))) (MulEquiv.submonoidMap.{u2, u1} M N _inst_1 _inst_2 e S) g)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{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} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))))) e (Subtype.val.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Set.{u2} M) (Set.instMembershipSet.{u2} M) x (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) g))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (e : MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) (S : Submonoid.{u2} M _inst_1) (g : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)), Eq.{succ u1} N (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (MulOneClass.toMul.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u2} M _inst_1 S)) (MulOneClass.toMul.{u1} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.toMulOneClass.{u2} M _inst_1 S) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.toMulOneClass.{u2} M _inst_1 S) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)))))) (MulEquiv.submonoidMap.{u2, u1} M N _inst_1 _inst_2 e S) g)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{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} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))))) e (Subtype.val.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Set.{u2} M) (Set.instMembershipSet.{u2} M) x (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) g))
 Case conversion may be inaccurate. Consider using '#align mul_equiv.coe_submonoid_map_apply MulEquiv.coe_submonoidMap_applyₓ'. -/
 @[simp, to_additive]
 theorem coe_submonoidMap_apply (e : M ≃* N) (S : Submonoid M) (g : S) :
@@ -2386,7 +2386,7 @@ theorem coe_submonoidMap_apply (e : M ≃* N) (S : Submonoid M) (g : S) :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (e : MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (S : Submonoid.{u1} M _inst_1) (g : coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)), Eq.{succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S)) (fun (_x : MulEquiv.{u2, u1} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S)) => (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) -> (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S)) (MulEquiv.hasCoeToFun.{u2, u1} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S)) (MulEquiv.symm.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (MulEquiv.submonoidMap.{u1, u2} M N _inst_1 _inst_2 e S)) g) (Subtype.mk.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (fun (_x : MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) => N -> M) (MulEquiv.hasCoeToFun.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (MulEquiv.symm.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g)) (Iff.mp (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (fun (_x : MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) => N -> M) (MulEquiv.hasCoeToFun.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (MulEquiv.symm.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S)) (Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (fun (_x : MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) => N -> M) (MulEquiv.hasCoeToFun.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (MulEquiv.symm.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g)) S) (SetLike.mem_coe.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1) S (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (fun (_x : MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) => N -> M) (MulEquiv.hasCoeToFun.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (MulEquiv.symm.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g))) (Iff.mp (Membership.Mem.{u2, u2} N (Set.{u2} N) (Set.hasMem.{u2} N) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g) (Set.image.{u1, u2} M N (coeFn.{max 1 (max (succ u1) (succ u2)) (succ u2) (succ u1), max (succ u1) (succ u2)} (Equiv.{succ u1, succ u2} M N) (fun (_x : Equiv.{succ u1, succ u2} M N) => M -> N) (Equiv.hasCoeToFun.{succ u1, succ u2} M N) (MulEquiv.toEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S))) (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} N M) (fun (_x : Equiv.{succ u2, succ u1} N M) => N -> M) (Equiv.hasCoeToFun.{succ u2, succ u1} N M) (Equiv.symm.{succ u1, succ u2} M N (MulEquiv.toEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e)) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S)) (Set.mem_image_equiv.{u1, u2} M N ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S) (MulEquiv.toEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g)) (Subtype.property.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) g))))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (e : MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) (S : Submonoid.{u2} M _inst_1) (g : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) => Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) g) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (fun (_x : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) => Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (MulOneClass.toMul.{u1} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (MulOneClass.toMul.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u2} M _inst_1 S)) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.toMulOneClass.{u2} M _inst_1 S) (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.toMulOneClass.{u2} M _inst_1 S) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S))))) (MulEquiv.symm.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (MulEquiv.submonoidMap.{u2, u1} M N _inst_1 _inst_2 e S)) g) (Subtype.mk.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : N) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (Iff.mp (Membership.mem.{u2, u2} M (Set.{u2} M) (Set.instMembershipSet.{u2} M) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : N) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) (Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : N) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) S) (SetLike.mem_coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : N) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g))) (Iff.mp (Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g) (Set.image.{u2, u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (Equiv.{succ u2, succ u1} M N) M (fun (_x : M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : M) => N) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} M N) (MulEquiv.toEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e)) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S))) (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : N) => M) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (Set.{u2} M) (Set.instMembershipSet.{u2} M) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (Equiv.{succ u1, succ u2} N M) N (fun (_x : N) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : N) => M) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u2} N M) (Equiv.symm.{succ u2, succ u1} M N (MulEquiv.toEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e)) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) (Set.mem_image_equiv.{u1, u2} M N (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S) (MulEquiv.toEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (Subtype.property.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S)) g))))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (e : MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) (S : Submonoid.{u2} M _inst_1) (g : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) => Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) g) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (fun (_x : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) => Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (MulOneClass.toMul.{u1} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (MulOneClass.toMul.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u2} M _inst_1 S)) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.toMulOneClass.{u2} M _inst_1 S) (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.toMulOneClass.{u2} M _inst_1 S) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S))))) (MulEquiv.symm.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (MulEquiv.submonoidMap.{u2, u1} M N _inst_1 _inst_2 e S)) g) (Subtype.mk.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : N) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (Iff.mp (Membership.mem.{u2, u2} M (Set.{u2} M) (Set.instMembershipSet.{u2} M) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : N) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) (Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : N) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) S) (SetLike.mem_coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : N) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g))) (Iff.mp (Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g) (Set.image.{u2, u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (Equiv.{succ u2, succ u1} M N) M (fun (_x : M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : M) => N) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} M N) (MulEquiv.toEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e)) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S))) (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : N) => M) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (Set.{u2} M) (Set.instMembershipSet.{u2} M) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (Equiv.{succ u1, succ u2} N M) N (fun (_x : N) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : N) => M) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u2} N M) (Equiv.symm.{succ u2, succ u1} M N (MulEquiv.toEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e)) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) (Set.mem_image_equiv.{u1, u2} M N (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S) (MulEquiv.toEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (Subtype.property.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S)) g))))
 Case conversion may be inaccurate. Consider using '#align mul_equiv.submonoid_map_symm_apply MulEquiv.submonoidMap_symm_applyₓ'. -/
 @[simp, to_additive AddEquiv.add_submonoid_map_symm_apply]
 theorem submonoidMap_symm_apply (e : M ≃* N) (S : Submonoid M) (g : S.map (e : M →* N)) :
Diff
@@ -242,7 +242,7 @@ def comap (f : F) (S : Submonoid N) : Submonoid M
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (S : Submonoid.{u2} N _inst_2) (f : F), Eq.{succ u1} (Set.{u1} M) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)) (Set.preimage.{u1, 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) (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 mc))) f) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Submonoid.{u2} N _inst_2) (Set.{u2} N) (HasLiftT.mk.{succ u2, succ u2} (Submonoid.{u2} N _inst_2) (Set.{u2} N) (CoeTCₓ.coe.{succ u2, succ u2} (Submonoid.{u2} N _inst_2) (Set.{u2} N) (SetLike.Set.hasCoeT.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) S))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] (S : Submonoid.{u3} N _inst_2) (f : F), Eq.{succ u2} (Set.{u2} M) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S)) (Set.preimage.{u2, u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f) (SetLike.coe.{u3, u3} (Submonoid.{u3} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u3} N _inst_2) S))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] (S : Submonoid.{u3} N _inst_2) (f : F), Eq.{succ u2} (Set.{u2} M) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S)) (Set.preimage.{u2, u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f) (SetLike.coe.{u3, u3} (Submonoid.{u3} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u3} N _inst_2) S))
 Case conversion may be inaccurate. Consider using '#align submonoid.coe_comap Submonoid.coe_comapₓ'. -/
 @[simp, to_additive]
 theorem coe_comap (S : Submonoid N) (f : F) : (S.comap f : Set M) = f ⁻¹' S :=
@@ -254,7 +254,7 @@ theorem coe_comap (S : Submonoid N) (f : F) : (S.comap f : Set M) = f ⁻¹' S :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {S : Submonoid.{u2} N _inst_2} {f : F} {x : M}, Iff (Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)) (Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{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 mc))) f x) S)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {S : Submonoid.{u3} N _inst_2} {f : F} {x : M}, Iff (Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S)) (Membership.mem.{u3, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (Submonoid.{u3} N _inst_2) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u3} N _inst_2)) (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f x) S)
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {S : Submonoid.{u3} N _inst_2} {f : F} {x : M}, Iff (Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S)) (Membership.mem.{u3, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (Submonoid.{u3} N _inst_2) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u3} N _inst_2)) (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f x) S)
 Case conversion may be inaccurate. Consider using '#align submonoid.mem_comap Submonoid.mem_comapₓ'. -/
 @[simp, to_additive]
 theorem mem_comap {S : Submonoid N} {f : F} {x : M} : x ∈ S.comap f ↔ f x ∈ S :=
@@ -301,7 +301,7 @@ def map (f : F) (S : Submonoid M) : Submonoid N
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F) (S : Submonoid.{u1} M _inst_1), Eq.{succ u2} (Set.{u2} N) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Submonoid.{u2} N _inst_2) (Set.{u2} N) (HasLiftT.mk.{succ u2, succ u2} (Submonoid.{u2} N _inst_2) (Set.{u2} N) (CoeTCₓ.coe.{succ u2, succ u2} (Submonoid.{u2} N _inst_2) (Set.{u2} N) (SetLike.Set.hasCoeT.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)) (Set.image.{u1, 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) (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 mc))) f) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) (S : Submonoid.{u3} M _inst_1), Eq.{succ u2} (Set.{u2} N) (SetLike.coe.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)) (Set.image.{u3, u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f) (SetLike.coe.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1) S))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) (S : Submonoid.{u3} M _inst_1), Eq.{succ u2} (Set.{u2} N) (SetLike.coe.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)) (Set.image.{u3, u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f) (SetLike.coe.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1) S))
 Case conversion may be inaccurate. Consider using '#align submonoid.coe_map Submonoid.coe_mapₓ'. -/
 @[simp, to_additive]
 theorem coe_map (f : F) (S : Submonoid M) : (S.map f : Set N) = f '' S :=
@@ -313,7 +313,7 @@ theorem coe_map (f : F) (S : Submonoid M) : (S.map f : Set N) = f '' S :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F} {S : Submonoid.{u1} M _inst_1} {y : N}, Iff (Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) y (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)) (Exists.{succ u1} M (fun (x : M) => Exists.{0} (Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S) (fun (H : Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S) => 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 (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 mc))) f x) y)))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F} {S : Submonoid.{u3} M _inst_1} {y : N}, Iff (Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) y (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)) (Exists.{succ u3} M (fun (x : M) => And (Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x S) (Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) (MulHomClass.toFunLike.{u1, u3, u2} F M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f x) y)))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F} {S : Submonoid.{u3} M _inst_1} {y : N}, Iff (Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) y (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)) (Exists.{succ u3} M (fun (x : M) => And (Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x S) (Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (MulHomClass.toFunLike.{u1, u3, u2} F M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f x) y)))
 Case conversion may be inaccurate. Consider using '#align submonoid.mem_map Submonoid.mem_mapₓ'. -/
 @[simp, to_additive]
 theorem mem_map {f : F} {S : Submonoid M} {y : N} : y ∈ S.map f ↔ ∃ x ∈ S, f x = y :=
@@ -325,7 +325,7 @@ theorem mem_map {f : F} {S : Submonoid M} {y : N} : y ∈ S.map f ↔ ∃ x ∈
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F) {S : Submonoid.{u1} M _inst_1} {x : M}, (Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S) -> (Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{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 mc))) f x) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) {S : Submonoid.{u3} M _inst_1} {x : M}, (Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x S) -> (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f x) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) {S : Submonoid.{u3} M _inst_1} {x : M}, (Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x S) -> (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f x) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S))
 Case conversion may be inaccurate. Consider using '#align submonoid.mem_map_of_mem Submonoid.mem_map_of_memₓ'. -/
 @[to_additive]
 theorem mem_map_of_mem (f : F) {S : Submonoid M} {x : M} (hx : x ∈ S) : f x ∈ S.map f :=
@@ -337,7 +337,7 @@ theorem mem_map_of_mem (f : F) {S : Submonoid M} {x : M} (hx : x ∈ S) : f x 
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F) (S : Submonoid.{u1} M _inst_1) (x : coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S), Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{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 mc))) f ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S))))) x)) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) (S : Submonoid.{u3} M _inst_1) (x : Subtype.{succ u3} M (fun (x : M) => Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x S)), Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) (Subtype.val.{succ u3} M (fun (x : M) => Membership.mem.{u3, u3} M (Set.{u3} M) (Set.instMembershipSet.{u3} M) x (SetLike.coe.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1) S)) x)) (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f (Subtype.val.{succ u3} M (fun (x : M) => Membership.mem.{u3, u3} M (Set.{u3} M) (Set.instMembershipSet.{u3} M) x (SetLike.coe.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1) S)) x)) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) (S : Submonoid.{u3} M _inst_1) (x : Subtype.{succ u3} M (fun (x : M) => Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x S)), Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (Subtype.val.{succ u3} M (fun (x : M) => Membership.mem.{u3, u3} M (Set.{u3} M) (Set.instMembershipSet.{u3} M) x (SetLike.coe.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1) S)) x)) (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f (Subtype.val.{succ u3} M (fun (x : M) => Membership.mem.{u3, u3} M (Set.{u3} M) (Set.instMembershipSet.{u3} M) x (SetLike.coe.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1) S)) x)) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)
 Case conversion may be inaccurate. Consider using '#align submonoid.apply_coe_mem_map Submonoid.apply_coe_mem_mapₓ'. -/
 @[to_additive]
 theorem apply_coe_mem_map (f : F) (S : Submonoid M) (x : S) : f x ∈ S.map f :=
@@ -365,7 +365,7 @@ include mc
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (forall {S : Submonoid.{u1} M _inst_1} {x : M}, Iff (Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{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 mc))) f x) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)) (Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall {S : Submonoid.{u3} M _inst_1} {x : M}, Iff (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f x) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)) (Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x S))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall {S : Submonoid.{u3} M _inst_1} {x : M}, Iff (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f x) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)) (Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x S))
 Case conversion may be inaccurate. Consider using '#align submonoid.mem_map_iff_mem Submonoid.mem_map_iff_memₓ'. -/
 @[to_additive]
 theorem mem_map_iff_mem {f : F} (hf : Function.Injective f) {S : Submonoid M} {x : M} :
@@ -587,7 +587,7 @@ include hf
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (GaloisCoinsertion.{u1, u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u1, succ u2} M N (FunLike.coe.{succ u3, succ u1, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 mc)) f)) -> (GaloisCoinsertion.{u1, u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u1, succ u2} M N (FunLike.coe.{succ u3, succ u1, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 mc)) f)) -> (GaloisCoinsertion.{u1, u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
 Case conversion may be inaccurate. Consider using '#align submonoid.gci_map_comap Submonoid.gciMapComapₓ'. -/
 /-- `map f` and `comap f` form a `galois_coinsertion` when `f` is injective. -/
 @[to_additive " `map f` and `comap f` form a `galois_coinsertion` when `f` is injective. "]
@@ -600,7 +600,7 @@ def gciMapComap : GaloisCoinsertion (map f) (comap f) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (forall (S : Submonoid.{u1} M _inst_1), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)) S)
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} M _inst_1), Eq.{succ u3} (Submonoid.{u3} M _inst_1) (Submonoid.comap.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)) S)
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} M _inst_1), Eq.{succ u3} (Submonoid.{u3} M _inst_1) (Submonoid.comap.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S)) S)
 Case conversion may be inaccurate. Consider using '#align submonoid.comap_map_eq_of_injective Submonoid.comap_map_eq_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_map_eq_of_injective (S : Submonoid M) : (S.map f).comap f = S :=
@@ -612,7 +612,7 @@ theorem comap_map_eq_of_injective (S : Submonoid M) : (S.map f).comap f = S :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (Function.Surjective.{succ u2, succ u1} (Submonoid.{u2} N _inst_2) (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (Function.Surjective.{succ u3, succ u2} (Submonoid.{u3} N _inst_2) (Submonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (Function.Surjective.{succ u3, succ u2} (Submonoid.{u3} N _inst_2) (Submonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f))
 Case conversion may be inaccurate. Consider using '#align submonoid.comap_surjective_of_injective Submonoid.comap_surjective_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_surjective_of_injective : Function.Surjective (comap f) :=
@@ -624,7 +624,7 @@ theorem comap_surjective_of_injective : Function.Surjective (comap f) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (Function.Injective.{succ u1, succ u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (Function.Injective.{succ u3, succ u2} (Submonoid.{u3} M _inst_1) (Submonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (Function.Injective.{succ u3, succ u2} (Submonoid.{u3} M _inst_1) (Submonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f))
 Case conversion may be inaccurate. Consider using '#align submonoid.map_injective_of_injective Submonoid.map_injective_of_injectiveₓ'. -/
 @[to_additive]
 theorem map_injective_of_injective : Function.Injective (map f) :=
@@ -636,7 +636,7 @@ theorem map_injective_of_injective : Function.Injective (map f) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (forall (S : Submonoid.{u1} M _inst_1) (T : Submonoid.{u1} M _inst_1), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Inf.inf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasInf.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))) (Inf.inf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasInf.{u1} M _inst_1) S T))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} M _inst_1) (T : Submonoid.{u3} M _inst_1), Eq.{succ u3} (Submonoid.{u3} M _inst_1) (Submonoid.comap.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Inf.inf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instInfSubmonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f T))) (Inf.inf.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instInfSubmonoid.{u3} M _inst_1) S T))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} M _inst_1) (T : Submonoid.{u3} M _inst_1), Eq.{succ u3} (Submonoid.{u3} M _inst_1) (Submonoid.comap.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Inf.inf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instInfSubmonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f T))) (Inf.inf.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instInfSubmonoid.{u3} M _inst_1) S T))
 Case conversion may be inaccurate. Consider using '#align submonoid.comap_inf_map_of_injective Submonoid.comap_inf_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_inf_map_of_injective (S T : Submonoid M) : (S.map f ⊓ T.map f).comap f = S ⊓ T :=
@@ -648,7 +648,7 @@ theorem comap_inf_map_of_injective (S T : Submonoid M) : (S.map f ⊓ T.map f).c
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {ι : Type.{u4}} {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) (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 mc))) f)) -> (forall (S : ι -> (Submonoid.{u1} M _inst_1)), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (infᵢ.{u2, succ u4} (Submonoid.{u2} N _inst_2) (Submonoid.hasInf.{u2} N _inst_2) ι (fun (i : ι) => Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (S i)))) (infᵢ.{u1, succ u4} (Submonoid.{u1} M _inst_1) (Submonoid.hasInf.{u1} M _inst_1) ι S))
 but is expected to have type
-  forall {M : Type.{u4}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u4} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u4, u3} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Injective.{succ u4, succ u3} M N (FunLike.coe.{succ u2, succ u4, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u2, u4, u3} F M N (MulOneClass.toMul.{u4} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u4, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} M _inst_1)), Eq.{succ u4} (Submonoid.{u4} M _inst_1) (Submonoid.comap.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (infᵢ.{u3, succ u1} (Submonoid.{u3} N _inst_2) (Submonoid.instInfSetSubmonoid.{u3} N _inst_2) ι (fun (i : ι) => Submonoid.map.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (S i)))) (infᵢ.{u4, succ u1} (Submonoid.{u4} M _inst_1) (Submonoid.instInfSetSubmonoid.{u4} M _inst_1) ι S))
+  forall {M : Type.{u4}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u4} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u4, u3} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Injective.{succ u4, succ u3} M N (FunLike.coe.{succ u2, succ u4, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u2, u4, u3} F M N (MulOneClass.toMul.{u4} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u4, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} M _inst_1)), Eq.{succ u4} (Submonoid.{u4} M _inst_1) (Submonoid.comap.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (infᵢ.{u3, succ u1} (Submonoid.{u3} N _inst_2) (Submonoid.instInfSetSubmonoid.{u3} N _inst_2) ι (fun (i : ι) => Submonoid.map.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (S i)))) (infᵢ.{u4, succ u1} (Submonoid.{u4} M _inst_1) (Submonoid.instInfSetSubmonoid.{u4} M _inst_1) ι S))
 Case conversion may be inaccurate. Consider using '#align submonoid.comap_infi_map_of_injective Submonoid.comap_infᵢ_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_infᵢ_map_of_injective (S : ι → Submonoid M) : (⨅ i, (S i).map f).comap f = infᵢ S :=
@@ -660,7 +660,7 @@ theorem comap_infᵢ_map_of_injective (S : ι → Submonoid M) : (⨅ i, (S i).m
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (forall (S : Submonoid.{u1} M _inst_1) (T : Submonoid.{u1} M _inst_1), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Sup.sup.{u2} (Submonoid.{u2} N _inst_2) (SemilatticeSup.toHasSup.{u2} (Submonoid.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.completeLattice.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))) (Sup.sup.{u1} (Submonoid.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Submonoid.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.completeLattice.{u1} M _inst_1)))) S T))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} M _inst_1) (T : Submonoid.{u3} M _inst_1), Eq.{succ u3} (Submonoid.{u3} M _inst_1) (Submonoid.comap.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Sup.sup.{u2} (Submonoid.{u2} N _inst_2) (SemilatticeSup.toSup.{u2} (Submonoid.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f T))) (Sup.sup.{u3} (Submonoid.{u3} M _inst_1) (SemilatticeSup.toSup.{u3} (Submonoid.{u3} M _inst_1) (Lattice.toSemilatticeSup.{u3} (Submonoid.{u3} M _inst_1) (CompleteLattice.toLattice.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1)))) S T))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} M _inst_1) (T : Submonoid.{u3} M _inst_1), Eq.{succ u3} (Submonoid.{u3} M _inst_1) (Submonoid.comap.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Sup.sup.{u2} (Submonoid.{u2} N _inst_2) (SemilatticeSup.toSup.{u2} (Submonoid.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f T))) (Sup.sup.{u3} (Submonoid.{u3} M _inst_1) (SemilatticeSup.toSup.{u3} (Submonoid.{u3} M _inst_1) (Lattice.toSemilatticeSup.{u3} (Submonoid.{u3} M _inst_1) (CompleteLattice.toLattice.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1)))) S T))
 Case conversion may be inaccurate. Consider using '#align submonoid.comap_sup_map_of_injective Submonoid.comap_sup_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_sup_map_of_injective (S T : Submonoid M) : (S.map f ⊔ T.map f).comap f = S ⊔ T :=
@@ -672,7 +672,7 @@ theorem comap_sup_map_of_injective (S T : Submonoid M) : (S.map f ⊔ T.map f).c
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {ι : Type.{u4}} {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) (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 mc))) f)) -> (forall (S : ι -> (Submonoid.{u1} M _inst_1)), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (supᵢ.{u2, succ u4} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeSup.toHasSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.completeLattice.{u2} N _inst_2))) ι (fun (i : ι) => Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (S i)))) (supᵢ.{u1, succ u4} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.completeLattice.{u1} M _inst_1))) ι S))
 but is expected to have type
-  forall {M : Type.{u4}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u4} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u4, u3} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Injective.{succ u4, succ u3} M N (FunLike.coe.{succ u2, succ u4, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u2, u4, u3} F M N (MulOneClass.toMul.{u4} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u4, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} M _inst_1)), Eq.{succ u4} (Submonoid.{u4} M _inst_1) (Submonoid.comap.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (supᵢ.{u3, succ u1} (Submonoid.{u3} N _inst_2) (CompleteLattice.toSupSet.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2)) ι (fun (i : ι) => Submonoid.map.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (S i)))) (supᵢ.{u4, succ u1} (Submonoid.{u4} M _inst_1) (CompleteLattice.toSupSet.{u4} (Submonoid.{u4} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u4} M _inst_1)) ι S))
+  forall {M : Type.{u4}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u4} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u4, u3} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Injective.{succ u4, succ u3} M N (FunLike.coe.{succ u2, succ u4, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u2, u4, u3} F M N (MulOneClass.toMul.{u4} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u4, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} M _inst_1)), Eq.{succ u4} (Submonoid.{u4} M _inst_1) (Submonoid.comap.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (supᵢ.{u3, succ u1} (Submonoid.{u3} N _inst_2) (CompleteLattice.toSupSet.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2)) ι (fun (i : ι) => Submonoid.map.{u4, u3, u2} M N _inst_1 _inst_2 F mc f (S i)))) (supᵢ.{u4, succ u1} (Submonoid.{u4} M _inst_1) (CompleteLattice.toSupSet.{u4} (Submonoid.{u4} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u4} M _inst_1)) ι S))
 Case conversion may be inaccurate. Consider using '#align submonoid.comap_supr_map_of_injective Submonoid.comap_supᵢ_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_supᵢ_map_of_injective (S : ι → Submonoid M) : (⨆ i, (S i).map f).comap f = supᵢ S :=
@@ -684,7 +684,7 @@ theorem comap_supᵢ_map_of_injective (S : ι → Submonoid M) : (⨆ i, (S i).m
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (forall {S : Submonoid.{u1} M _inst_1} {T : Submonoid.{u1} M _inst_1}, Iff (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toLE.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T)) (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S T))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall {S : Submonoid.{u3} M _inst_1} {T : Submonoid.{u3} M _inst_1}, Iff (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toLE.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2))))) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f T)) (LE.le.{u3} (Submonoid.{u3} M _inst_1) (Preorder.toLE.{u3} (Submonoid.{u3} M _inst_1) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1))))) S T))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall {S : Submonoid.{u3} M _inst_1} {T : Submonoid.{u3} M _inst_1}, Iff (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toLE.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2))))) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f T)) (LE.le.{u3} (Submonoid.{u3} M _inst_1) (Preorder.toLE.{u3} (Submonoid.{u3} M _inst_1) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1))))) S T))
 Case conversion may be inaccurate. Consider using '#align submonoid.map_le_map_iff_of_injective Submonoid.map_le_map_iff_of_injectiveₓ'. -/
 @[to_additive]
 theorem map_le_map_iff_of_injective {S T : Submonoid M} : S.map f ≤ T.map f ↔ S ≤ T :=
@@ -696,7 +696,7 @@ theorem map_le_map_iff_of_injective {S T : Submonoid M} : S.map f ≤ T.map f 
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (StrictMono.{u1, u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (StrictMono.{u3, u2} (Submonoid.{u3} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (StrictMono.{u3, u2} (Submonoid.{u3} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f))
 Case conversion may be inaccurate. Consider using '#align submonoid.map_strict_mono_of_injective Submonoid.map_strictMono_of_injectiveₓ'. -/
 @[to_additive]
 theorem map_strictMono_of_injective : StrictMono (map f) :=
@@ -716,7 +716,7 @@ include hf
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (GaloisInsertion.{u1, u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{succ u3, succ u1, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 mc)) f)) -> (GaloisInsertion.{u1, u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{succ u3, succ u1, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 mc)) f)) -> (GaloisInsertion.{u1, u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u1} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
 Case conversion may be inaccurate. Consider using '#align submonoid.gi_map_comap Submonoid.giMapComapₓ'. -/
 /-- `map f` and `comap f` form a `galois_insertion` when `f` is surjective. -/
 @[to_additive " `map f` and `comap f` form a `galois_insertion` when `f` is surjective. "]
@@ -731,7 +731,7 @@ def giMapComap : GaloisInsertion (map f) (comap f) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (forall (S : Submonoid.{u2} N _inst_2), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S)) S)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} N _inst_2), Eq.{succ u3} (Submonoid.{u3} N _inst_2) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S)) S)
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} N _inst_2), Eq.{succ u3} (Submonoid.{u3} N _inst_2) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S)) S)
 Case conversion may be inaccurate. Consider using '#align submonoid.map_comap_eq_of_surjective Submonoid.map_comap_eq_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_comap_eq_of_surjective (S : Submonoid N) : (S.comap f).map f = S :=
@@ -743,7 +743,7 @@ theorem map_comap_eq_of_surjective (S : Submonoid N) : (S.comap f).map f = S :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (Function.Surjective.{succ u1, succ u2} (Submonoid.{u1} M _inst_1) (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (Function.Surjective.{succ u3, succ u2} (Submonoid.{u3} M _inst_1) (Submonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (Function.Surjective.{succ u3, succ u2} (Submonoid.{u3} M _inst_1) (Submonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f))
 Case conversion may be inaccurate. Consider using '#align submonoid.map_surjective_of_surjective Submonoid.map_surjective_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_surjective_of_surjective : Function.Surjective (map f) :=
@@ -755,7 +755,7 @@ theorem map_surjective_of_surjective : Function.Surjective (map f) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (Function.Injective.{succ u2, succ u1} (Submonoid.{u2} N _inst_2) (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (Function.Injective.{succ u3, succ u2} (Submonoid.{u3} N _inst_2) (Submonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (Function.Injective.{succ u3, succ u2} (Submonoid.{u3} N _inst_2) (Submonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f))
 Case conversion may be inaccurate. Consider using '#align submonoid.comap_injective_of_surjective Submonoid.comap_injective_of_surjectiveₓ'. -/
 @[to_additive]
 theorem comap_injective_of_surjective : Function.Injective (comap f) :=
@@ -767,7 +767,7 @@ theorem comap_injective_of_surjective : Function.Injective (comap f) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (forall (S : Submonoid.{u2} N _inst_2) (T : Submonoid.{u2} N _inst_2), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Inf.inf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasInf.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))) (Inf.inf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasInf.{u2} N _inst_2) S T))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} N _inst_2) (T : Submonoid.{u3} N _inst_2), Eq.{succ u3} (Submonoid.{u3} N _inst_2) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Inf.inf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instInfSubmonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f T))) (Inf.inf.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instInfSubmonoid.{u3} N _inst_2) S T))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} N _inst_2) (T : Submonoid.{u3} N _inst_2), Eq.{succ u3} (Submonoid.{u3} N _inst_2) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Inf.inf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instInfSubmonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f T))) (Inf.inf.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instInfSubmonoid.{u3} N _inst_2) S T))
 Case conversion may be inaccurate. Consider using '#align submonoid.map_inf_comap_of_surjective Submonoid.map_inf_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_inf_comap_of_surjective (S T : Submonoid N) : (S.comap f ⊓ T.comap f).map f = S ⊓ T :=
@@ -779,7 +779,7 @@ theorem map_inf_comap_of_surjective (S T : Submonoid N) : (S.comap f ⊓ T.comap
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {ι : Type.{u4}} {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (forall (S : ι -> (Submonoid.{u2} N _inst_2)), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (infᵢ.{u1, succ u4} (Submonoid.{u1} M _inst_1) (Submonoid.hasInf.{u1} M _inst_1) ι (fun (i : ι) => Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (S i)))) (infᵢ.{u2, succ u4} (Submonoid.{u2} N _inst_2) (Submonoid.hasInf.{u2} N _inst_2) ι S))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u4}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u4} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u3, u4} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Surjective.{succ u3, succ u4} M N (FunLike.coe.{succ u2, succ u3, succ u4} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u2, u3, u4} F M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u4} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u3, u4} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} N _inst_2)), Eq.{succ u4} (Submonoid.{u4} N _inst_2) (Submonoid.map.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (infᵢ.{u3, succ u1} (Submonoid.{u3} M _inst_1) (Submonoid.instInfSetSubmonoid.{u3} M _inst_1) ι (fun (i : ι) => Submonoid.comap.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (S i)))) (infᵢ.{u4, succ u1} (Submonoid.{u4} N _inst_2) (Submonoid.instInfSetSubmonoid.{u4} N _inst_2) ι S))
+  forall {M : Type.{u3}} {N : Type.{u4}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u4} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u3, u4} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Surjective.{succ u3, succ u4} M N (FunLike.coe.{succ u2, succ u3, succ u4} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u2, u3, u4} F M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u4} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u3, u4} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} N _inst_2)), Eq.{succ u4} (Submonoid.{u4} N _inst_2) (Submonoid.map.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (infᵢ.{u3, succ u1} (Submonoid.{u3} M _inst_1) (Submonoid.instInfSetSubmonoid.{u3} M _inst_1) ι (fun (i : ι) => Submonoid.comap.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (S i)))) (infᵢ.{u4, succ u1} (Submonoid.{u4} N _inst_2) (Submonoid.instInfSetSubmonoid.{u4} N _inst_2) ι S))
 Case conversion may be inaccurate. Consider using '#align submonoid.map_infi_comap_of_surjective Submonoid.map_infᵢ_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_infᵢ_comap_of_surjective (S : ι → Submonoid N) : (⨅ i, (S i).comap f).map f = infᵢ S :=
@@ -791,7 +791,7 @@ theorem map_infᵢ_comap_of_surjective (S : ι → Submonoid N) : (⨅ i, (S i).
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (forall (S : Submonoid.{u2} N _inst_2) (T : Submonoid.{u2} N _inst_2), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Sup.sup.{u1} (Submonoid.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Submonoid.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.completeLattice.{u1} M _inst_1)))) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))) (Sup.sup.{u2} (Submonoid.{u2} N _inst_2) (SemilatticeSup.toHasSup.{u2} (Submonoid.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.completeLattice.{u2} N _inst_2)))) S T))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} N _inst_2) (T : Submonoid.{u3} N _inst_2), Eq.{succ u3} (Submonoid.{u3} N _inst_2) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Sup.sup.{u2} (Submonoid.{u2} M _inst_1) (SemilatticeSup.toSup.{u2} (Submonoid.{u2} M _inst_1) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1)))) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f T))) (Sup.sup.{u3} (Submonoid.{u3} N _inst_2) (SemilatticeSup.toSup.{u3} (Submonoid.{u3} N _inst_2) (Lattice.toSemilatticeSup.{u3} (Submonoid.{u3} N _inst_2) (CompleteLattice.toLattice.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2)))) S T))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} N _inst_2) (T : Submonoid.{u3} N _inst_2), Eq.{succ u3} (Submonoid.{u3} N _inst_2) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Sup.sup.{u2} (Submonoid.{u2} M _inst_1) (SemilatticeSup.toSup.{u2} (Submonoid.{u2} M _inst_1) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1)))) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f T))) (Sup.sup.{u3} (Submonoid.{u3} N _inst_2) (SemilatticeSup.toSup.{u3} (Submonoid.{u3} N _inst_2) (Lattice.toSemilatticeSup.{u3} (Submonoid.{u3} N _inst_2) (CompleteLattice.toLattice.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2)))) S T))
 Case conversion may be inaccurate. Consider using '#align submonoid.map_sup_comap_of_surjective Submonoid.map_sup_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_sup_comap_of_surjective (S T : Submonoid N) : (S.comap f ⊔ T.comap f).map f = S ⊔ T :=
@@ -803,7 +803,7 @@ theorem map_sup_comap_of_surjective (S T : Submonoid N) : (S.comap f ⊔ T.comap
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {ι : Type.{u4}} {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (forall (S : ι -> (Submonoid.{u2} N _inst_2)), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (supᵢ.{u1, succ u4} (Submonoid.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.completeLattice.{u1} M _inst_1))) ι (fun (i : ι) => Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (S i)))) (supᵢ.{u2, succ u4} (Submonoid.{u2} N _inst_2) (CompleteSemilatticeSup.toHasSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.completeLattice.{u2} N _inst_2))) ι S))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u4}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u4} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u3, u4} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Surjective.{succ u3, succ u4} M N (FunLike.coe.{succ u2, succ u3, succ u4} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u2, u3, u4} F M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u4} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u3, u4} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} N _inst_2)), Eq.{succ u4} (Submonoid.{u4} N _inst_2) (Submonoid.map.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (supᵢ.{u3, succ u1} (Submonoid.{u3} M _inst_1) (CompleteLattice.toSupSet.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1)) ι (fun (i : ι) => Submonoid.comap.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (S i)))) (supᵢ.{u4, succ u1} (Submonoid.{u4} N _inst_2) (CompleteLattice.toSupSet.{u4} (Submonoid.{u4} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u4} N _inst_2)) ι S))
+  forall {M : Type.{u3}} {N : Type.{u4}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u4} N] {F : Type.{u2}} [mc : MonoidHomClass.{u2, u3, u4} F M N _inst_1 _inst_2] {ι : Type.{u1}} {f : F}, (Function.Surjective.{succ u3, succ u4} M N (FunLike.coe.{succ u2, succ u3, succ u4} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u2, u3, u4} F M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u4} N _inst_2) (MonoidHomClass.toMulHomClass.{u2, u3, u4} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : ι -> (Submonoid.{u4} N _inst_2)), Eq.{succ u4} (Submonoid.{u4} N _inst_2) (Submonoid.map.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (supᵢ.{u3, succ u1} (Submonoid.{u3} M _inst_1) (CompleteLattice.toSupSet.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1)) ι (fun (i : ι) => Submonoid.comap.{u3, u4, u2} M N _inst_1 _inst_2 F mc f (S i)))) (supᵢ.{u4, succ u1} (Submonoid.{u4} N _inst_2) (CompleteLattice.toSupSet.{u4} (Submonoid.{u4} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u4} N _inst_2)) ι S))
 Case conversion may be inaccurate. Consider using '#align submonoid.map_supr_comap_of_surjective Submonoid.map_supᵢ_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_supᵢ_comap_of_surjective (S : ι → Submonoid N) : (⨆ i, (S i).comap f).map f = supᵢ S :=
@@ -815,7 +815,7 @@ theorem map_supᵢ_comap_of_surjective (S : ι → Submonoid N) : (⨆ i, (S i).
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (forall {S : Submonoid.{u2} N _inst_2} {T : Submonoid.{u2} N _inst_2}, Iff (LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T)) (LE.le.{u2} (Submonoid.{u2} N _inst_2) (Preorder.toLE.{u2} (Submonoid.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) S T))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall {S : Submonoid.{u3} N _inst_2} {T : Submonoid.{u3} N _inst_2}, Iff (LE.le.{u2} (Submonoid.{u2} M _inst_1) (Preorder.toLE.{u2} (Submonoid.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1))))) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f T)) (LE.le.{u3} (Submonoid.{u3} N _inst_2) (Preorder.toLE.{u3} (Submonoid.{u3} N _inst_2) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2))))) S T))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall {S : Submonoid.{u3} N _inst_2} {T : Submonoid.{u3} N _inst_2}, Iff (LE.le.{u2} (Submonoid.{u2} M _inst_1) (Preorder.toLE.{u2} (Submonoid.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1))))) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f T)) (LE.le.{u3} (Submonoid.{u3} N _inst_2) (Preorder.toLE.{u3} (Submonoid.{u3} N _inst_2) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2))))) S T))
 Case conversion may be inaccurate. Consider using '#align submonoid.comap_le_comap_iff_of_surjective Submonoid.comap_le_comap_iff_of_surjectiveₓ'. -/
 @[to_additive]
 theorem comap_le_comap_iff_of_surjective {S T : Submonoid N} : S.comap f ≤ T.comap f ↔ S ≤ T :=
@@ -827,7 +827,7 @@ theorem comap_le_comap_iff_of_surjective {S T : Submonoid N} : S.comap f ≤ T.c
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (StrictMono.{u2, u1} (Submonoid.{u2} N _inst_2) (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2))) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1))) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (StrictMono.{u3, u2} (Submonoid.{u3} N _inst_2) (Submonoid.{u2} M _inst_1) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2)))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1)))) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (StrictMono.{u3, u2} (Submonoid.{u3} N _inst_2) (Submonoid.{u2} M _inst_1) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2)))) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1)))) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f))
 Case conversion may be inaccurate. Consider using '#align submonoid.comap_strict_mono_of_surjective Submonoid.comap_strictMono_of_surjectiveₓ'. -/
 @[to_additive]
 theorem comap_strictMono_of_surjective : StrictMono (comap f) :=
@@ -1031,7 +1031,7 @@ def Subtype : S' →* M :=
 lean 3 declaration is
   forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {A : Type.{u2}} [_inst_4 : SetLike.{u2, u1} A M] [hA : SubmonoidClass.{u2, u1} A M _inst_1 _inst_4] (S' : A), Eq.{succ u1} ((fun (_x : MonoidHom.{u1, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') M (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 A _inst_4 hA S') _inst_1) => (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') -> M) (SubmonoidClass.Subtype.{u1, u2} M _inst_1 A _inst_4 hA S')) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') M (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 A _inst_4 hA S') _inst_1) (fun (_x : MonoidHom.{u1, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') M (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 A _inst_4 hA S') _inst_1) => (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') -> M) (MonoidHom.hasCoeToFun.{u1, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') M (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 A _inst_4 hA S') _inst_1) (SubmonoidClass.Subtype.{u1, u2} M _inst_1 A _inst_4 hA S')) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') M (coeBase.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S') M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_4) x S'))))))
 but is expected to have type
-  forall {M : Type.{u2}} [_inst_1 : MulOneClass.{u2} M] {A : Type.{u1}} [_inst_4 : SetLike.{u1, u2} A M] [hA : SubmonoidClass.{u1, u2} A M _inst_1 _inst_4] (S' : A), Eq.{succ u2} (forall (a : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) => M) a) (FunLike.coe.{succ u2, succ u2, succ u2} (MonoidHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) => M) _x) (MulHomClass.toFunLike.{u2, u2, u2} (MonoidHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (MulOneClass.toMul.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S')) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{u2, u2, u2} (MonoidHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1 (MonoidHom.monoidHomClass.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1))) (SubmonoidClass.Subtype.{u2, u1} M _inst_1 A _inst_4 hA S')) (Subtype.val.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S'))
+  forall {M : Type.{u2}} [_inst_1 : MulOneClass.{u2} M] {A : Type.{u1}} [_inst_4 : SetLike.{u1, u2} A M] [hA : SubmonoidClass.{u1, u2} A M _inst_1 _inst_4] (S' : A), Eq.{succ u2} (forall (a : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) => M) a) (FunLike.coe.{succ u2, succ u2, succ u2} (MonoidHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) => M) _x) (MulHomClass.toFunLike.{u2, u2, u2} (MonoidHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (MulOneClass.toMul.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S')) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{u2, u2, u2} (MonoidHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1 (MonoidHom.monoidHomClass.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S')) M (SubmonoidClass.toMulOneClass.{u2, u1} M _inst_1 A _inst_4 hA S') _inst_1))) (SubmonoidClass.Subtype.{u2, u1} M _inst_1 A _inst_4 hA S')) (Subtype.val.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_4) x S'))
 Case conversion may be inaccurate. Consider using '#align submonoid_class.coe_subtype SubmonoidClass.coe_subtypeₓ'. -/
 @[simp, to_additive]
 theorem coe_subtype : (SubmonoidClass.Subtype S' : S' → M) = coe :=
@@ -1275,7 +1275,7 @@ def subtype : S →* M :=
 lean 3 declaration is
   forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1), Eq.{succ u1} ((coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) -> M) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) (fun (_x : MonoidHom.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) => (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) -> M) (MonoidHom.hasCoeToFun.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) (Submonoid.subtype.{u1} M _inst_1 S)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S))))))
 but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1), Eq.{succ u1} (forall (ᾰ : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) => M) ᾰ) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (fun (_x : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (MulOneClass.toMul.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u1} M _inst_1 S)) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1 (MonoidHom.monoidHomClass.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1))) (Submonoid.subtype.{u1} M _inst_1 S)) (Subtype.val.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S))
+  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] (S : Submonoid.{u1} M _inst_1), Eq.{succ u1} (forall (ᾰ : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) => M) ᾰ) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (fun (_x : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (MulOneClass.toMul.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u1} M _inst_1 S)) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1 (MonoidHom.monoidHomClass.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) M (Submonoid.toMulOneClass.{u1} M _inst_1 S) _inst_1))) (Submonoid.subtype.{u1} M _inst_1 S)) (Subtype.val.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S))
 Case conversion may be inaccurate. Consider using '#align submonoid.coe_subtype Submonoid.coe_subtypeₓ'. -/
 @[simp, to_additive]
 theorem coe_subtype : ⇑S.Subtype = coe :=
@@ -1316,7 +1316,7 @@ theorem topEquiv_toMonoidHom : (topEquiv : _ ≃* M).toMonoidHom = (⊤ : Submon
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (S : Submonoid.{u1} M _inst_1) (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), (Function.Injective.{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)) -> (MulEquiv.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (S : Submonoid.{u1} M _inst_1) (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), (Function.Injective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, 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 u1 u2, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u1 u2, 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))) f)) -> (MulEquiv.{u1, u2} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (S : Submonoid.{u1} M _inst_1) (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), (Function.Injective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, 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 u1 u2, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u1 u2, 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))) f)) -> (MulEquiv.{u1, u2} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u1} M _inst_1)) x S)) (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)))
 Case conversion may be inaccurate. Consider using '#align submonoid.equiv_map_of_injective Submonoid.equivMapOfInjectiveₓ'. -/
 /-- A subgroup is isomorphic to its image under an injective function. If you have an isomorphism,
 use `mul_equiv.submonoid_map` for better definitional equalities. -/
@@ -1331,7 +1331,7 @@ noncomputable def equivMapOfInjective (f : M →* N) (hf : Function.Injective f)
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (S : Submonoid.{u1} M _inst_1) (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2) (hf : Function.Injective.{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)) (x : coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S), Eq.{succ u2} N ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)))))) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MulEquiv.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S))) (fun (_x : MulEquiv.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S))) => (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) -> (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S))) (MulEquiv.hasCoeToFun.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f S))) (Submonoid.equivMapOfInjective.{u1, u2} M N _inst_1 _inst_2 S f hf) 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 ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S))))) x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (S : Submonoid.{u2} M _inst_1) (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2) (hf : Function.Injective.{succ u2, succ u1} M N (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 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)), Eq.{succ u1} N (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (MulOneClass.toMul.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u2} M _inst_1 S)) (MulOneClass.toMul.{u1} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.toMulOneClass.{u2} M _inst_1 S) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S)) (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.toMulOneClass.{u2} M _inst_1 S) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S)) (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S)))))) (Submonoid.equivMapOfInjective.{u2, u1} M N _inst_1 _inst_2 S f hf) 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 (Subtype.val.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Set.{u2} M) (Set.instMembershipSet.{u2} M) x (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) x))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (S : Submonoid.{u2} M _inst_1) (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2) (hf : Function.Injective.{succ u2, succ u1} M N (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 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)), Eq.{succ u1} N (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (MulOneClass.toMul.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u2} M _inst_1 S)) (MulOneClass.toMul.{u1} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.toMulOneClass.{u2} M _inst_1 S) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S)) (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.toMulOneClass.{u2} M _inst_1 S) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S)) (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f S)))))) (Submonoid.equivMapOfInjective.{u2, u1} M N _inst_1 _inst_2 S f hf) 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 (Subtype.val.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Set.{u2} M) (Set.instMembershipSet.{u2} M) x (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) x))
 Case conversion may be inaccurate. Consider using '#align submonoid.coe_equiv_map_of_injective_apply Submonoid.coe_equivMapOfInjective_applyₓ'. -/
 @[simp, to_additive]
 theorem coe_equivMapOfInjective_apply (f : M →* N) (hf : Function.Injective f) (x : S) :
@@ -1528,7 +1528,7 @@ theorem prod_bot_sup_bot_prod (s : Submonoid M) (t : Submonoid N) :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {f : MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)} {K : Submonoid.{u1} M _inst_1} {x : N}, Iff (Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 f) K)) (Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (fun (_x : MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) => N -> M) (MulEquiv.hasCoeToFun.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (MulEquiv.symm.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) f) x) K)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {f : MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)} {K : Submonoid.{u2} M _inst_1} {x : N}, Iff (Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 f) K)) (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : N) => M) x) (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : N) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) f) x) K)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {f : MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)} {K : Submonoid.{u2} M _inst_1} {x : N}, Iff (Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 f) K)) (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : N) => M) x) (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : N) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) f) x) K)
 Case conversion may be inaccurate. Consider using '#align submonoid.mem_map_equiv Submonoid.mem_map_equivₓ'. -/
 @[to_additive]
 theorem mem_map_equiv {f : M ≃* N} {K : Submonoid M} {x : N} :
@@ -1682,7 +1682,7 @@ def mrange (f : F) : Submonoid N :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), Eq.{succ u2} (Set.{u2} N) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Submonoid.{u2} N _inst_2) (Set.{u2} N) (HasLiftT.mk.{succ u2, succ u2} (Submonoid.{u2} N _inst_2) (Set.{u2} N) (CoeTCₓ.coe.{succ u2, succ u2} (Submonoid.{u2} N _inst_2) (Set.{u2} N) (SetLike.Set.hasCoeT.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)))) (MonoidHom.mrange.{u1, u2, u3} M N _inst_1 _inst_2 F mc f)) (Set.range.{u2, succ u1} N M (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 mc))) f))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] (f : F), Eq.{succ u3} (Set.{u3} N) (SetLike.coe.{u3, u3} (Submonoid.{u3} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u3} N _inst_2) (MonoidHom.mrange.{u2, u3, u1} M N _inst_1 _inst_2 F mc f)) (Set.range.{u3, succ u2} N M (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] (f : F), Eq.{succ u3} (Set.{u3} N) (SetLike.coe.{u3, u3} (Submonoid.{u3} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u3} N _inst_2) (MonoidHom.mrange.{u2, u3, u1} M N _inst_1 _inst_2 F mc f)) (Set.range.{u3, succ u2} N M (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_mrange MonoidHom.coe_mrangeₓ'. -/
 @[simp, to_additive]
 theorem coe_mrange (f : F) : (mrange f : Set N) = Set.range f :=
@@ -1694,7 +1694,7 @@ theorem coe_mrange (f : F) : (mrange f : Set N) = Set.range f :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F} {y : N}, Iff (Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) y (MonoidHom.mrange.{u1, u2, u3} M N _inst_1 _inst_2 F mc f)) (Exists.{succ u1} M (fun (x : 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 (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 mc))) f x) y))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F} {y : N}, Iff (Membership.mem.{u3, u3} N (Submonoid.{u3} N _inst_2) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u3} N _inst_2)) y (MonoidHom.mrange.{u2, u3, u1} M N _inst_1 _inst_2 F mc f)) (Exists.{succ u2} M (fun (x : M) => Eq.{succ u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f x) y))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F} {y : N}, Iff (Membership.mem.{u3, u3} N (Submonoid.{u3} N _inst_2) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u3} N _inst_2)) y (MonoidHom.mrange.{u2, u3, u1} M N _inst_1 _inst_2 F mc f)) (Exists.{succ u2} M (fun (x : M) => Eq.{succ u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f x) y))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.mem_mrange MonoidHom.mem_mrangeₓ'. -/
 @[simp, to_additive]
 theorem mem_mrange {f : F} {y : N} : y ∈ mrange f ↔ ∃ x, f x = y :=
@@ -1734,7 +1734,7 @@ include mc
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, Iff (Eq.{succ u2} (Submonoid.{u2} N _inst_2) (MonoidHom.mrange.{u1, u2, u3} M N _inst_1 _inst_2 F mc f) (Top.top.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasTop.{u2} N _inst_2))) (Function.Surjective.{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) (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 mc))) f))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, Iff (Eq.{succ u3} (Submonoid.{u3} N _inst_2) (MonoidHom.mrange.{u2, u3, u1} M N _inst_1 _inst_2 F mc f) (Top.top.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instTopSubmonoid.{u3} N _inst_2))) (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, Iff (Eq.{succ u3} (Submonoid.{u3} N _inst_2) (MonoidHom.mrange.{u2, u3, u1} M N _inst_1 _inst_2 F mc f) (Top.top.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instTopSubmonoid.{u3} N _inst_2))) (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.mrange_top_iff_surjective MonoidHom.mrange_top_iff_surjectiveₓ'. -/
 @[to_additive]
 theorem mrange_top_iff_surjective {f : F} : mrange f = (⊤ : Submonoid N) ↔ Function.Surjective f :=
@@ -1746,7 +1746,7 @@ theorem mrange_top_iff_surjective {f : F} : mrange f = (⊤ : Submonoid N) ↔ F
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), (Function.Surjective.{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) (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 mc))) f)) -> (Eq.{succ u2} (Submonoid.{u2} N _inst_2) (MonoidHom.mrange.{u1, u2, u3} M N _inst_1 _inst_2 F mc f) (Top.top.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasTop.{u2} N _inst_2)))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F), (Function.Surjective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (Eq.{succ u2} (Submonoid.{u2} N _inst_2) (MonoidHom.mrange.{u3, u2, u1} M N _inst_1 _inst_2 F mc f) (Top.top.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instTopSubmonoid.{u2} N _inst_2)))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F), (Function.Surjective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (Eq.{succ u2} (Submonoid.{u2} N _inst_2) (MonoidHom.mrange.{u3, u2, u1} M N _inst_1 _inst_2 F mc f) (Top.top.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instTopSubmonoid.{u2} N _inst_2)))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.mrange_top_of_surjective MonoidHom.mrange_top_of_surjectiveₓ'. -/
 /-- The range of a surjective monoid hom is the whole of the codomain. -/
 @[to_additive "The range of a surjective `add_monoid` hom is the whole of the codomain."]
@@ -1760,7 +1760,7 @@ theorem mrange_top_of_surjective (f : F) (hf : Function.Surjective f) :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F) (s : Set.{u2} N), LE.le.{u1} (Submonoid.{u1} M _inst_1) (Preorder.toLE.{u1} (Submonoid.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Submonoid.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) (Submonoid.closure.{u1} M _inst_1 (Set.preimage.{u1, 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) (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 mc))) f) s)) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Submonoid.closure.{u2} N _inst_2 s))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] (f : F) (s : Set.{u3} N), LE.le.{u2} (Submonoid.{u2} M _inst_1) (Preorder.toLE.{u2} (Submonoid.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1))))) (Submonoid.closure.{u2} M _inst_1 (Set.preimage.{u2, u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f) s)) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Submonoid.closure.{u3} N _inst_2 s))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] (f : F) (s : Set.{u3} N), LE.le.{u2} (Submonoid.{u2} M _inst_1) (Preorder.toLE.{u2} (Submonoid.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Submonoid.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1))))) (Submonoid.closure.{u2} M _inst_1 (Set.preimage.{u2, u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f) s)) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Submonoid.closure.{u3} N _inst_2 s))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.mclosure_preimage_le MonoidHom.mclosure_preimage_leₓ'. -/
 @[to_additive]
 theorem mclosure_preimage_le (f : F) (s : Set N) : closure (f ⁻¹' s) ≤ (closure s).comap f :=
@@ -1772,7 +1772,7 @@ theorem mclosure_preimage_le (f : F) (s : Set N) : closure (f ⁻¹' s) ≤ (clo
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F) (s : Set.{u1} M), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Submonoid.closure.{u1} M _inst_1 s)) (Submonoid.closure.{u2} N _inst_2 (Set.image.{u1, 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) (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 mc))) f) s))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) (s : Set.{u3} M), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Submonoid.closure.{u3} M _inst_1 s)) (Submonoid.closure.{u2} N _inst_2 (Set.image.{u3, u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f) s))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) (s : Set.{u3} M), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Submonoid.closure.{u3} M _inst_1 s)) (Submonoid.closure.{u2} N _inst_2 (Set.image.{u3, u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f) s))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_mclosure MonoidHom.map_mclosureₓ'. -/
 /-- The image under a monoid hom of the submonoid generated by a set equals the submonoid generated
     by the image of the set. -/
@@ -1802,7 +1802,7 @@ def restrict {N S : Type _} [MulOneClass N] [SetLike S M] [SubmonoidClass S M] (
 lean 3 declaration is
   forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {N : Type.{u2}} {S : Type.{u3}} [_inst_4 : MulOneClass.{u2} N] [_inst_5 : SetLike.{u3, u1} S M] [_inst_6 : SubmonoidClass.{u3, u1} S M _inst_1 _inst_5] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_4) (s : S) (x : coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s) N (SubmonoidClass.toMulOneClass.{u1, u3} M _inst_1 S _inst_5 _inst_6 s) _inst_4) (fun (_x : MonoidHom.{u1, u2} (coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s) N (SubmonoidClass.toMulOneClass.{u1, u3} M _inst_1 S _inst_5 _inst_6 s) _inst_4) => (coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s) -> N) (MonoidHom.hasCoeToFun.{u1, u2} (coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s) N (SubmonoidClass.toMulOneClass.{u1, u3} M _inst_1 S _inst_5 _inst_6 s) _inst_4) (MonoidHom.restrict.{u1, u2, u3} M _inst_1 N S _inst_4 _inst_5 _inst_6 f s) x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_4) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_4) f ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s) M (coeBase.{succ u1, succ u1} (coeSort.{succ u3, succ (succ u1)} S Type.{u1} (SetLike.hasCoeToSort.{u3, u1} S M _inst_5) s) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u3} M S (SetLike.hasMem.{u3, u1} S M _inst_5) x s))))) x))
 but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {N : Type.{u3}} {S : Type.{u2}} [_inst_4 : MulOneClass.{u3} N] [_inst_5 : SetLike.{u2, u1} S M] [_inst_6 : SubmonoidClass.{u2, u1} S M _inst_1 _inst_5] (f : MonoidHom.{u1, u3} M N _inst_1 _inst_4) (s : S) (x : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)), Eq.{succ u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) => N) x) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (MonoidHom.{u1, u3} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) (fun (_x : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) => N) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} (MonoidHom.{u1, u3} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (MulOneClass.toMul.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s)) (MulOneClass.toMul.{u3} N _inst_4) (MonoidHomClass.toMulHomClass.{max u1 u3, u1, u3} (MonoidHom.{u1, u3} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4 (MonoidHom.monoidHomClass.{u1, u3} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4))) (MonoidHom.restrict.{u1, u3, u2} M _inst_1 N S _inst_4 _inst_5 _inst_6 f s) x) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (MonoidHom.{u1, u3} M N _inst_1 _inst_4) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} (MonoidHom.{u1, u3} M N _inst_1 _inst_4) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u3} N _inst_4) (MonoidHomClass.toMulHomClass.{max u1 u3, u1, u3} (MonoidHom.{u1, u3} M N _inst_1 _inst_4) M N _inst_1 _inst_4 (MonoidHom.monoidHomClass.{u1, u3} M N _inst_1 _inst_4))) f (Subtype.val.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) x (SetLike.coe.{u2, u1} S M _inst_5 s)) x))
+  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {N : Type.{u3}} {S : Type.{u2}} [_inst_4 : MulOneClass.{u3} N] [_inst_5 : SetLike.{u2, u1} S M] [_inst_6 : SubmonoidClass.{u2, u1} S M _inst_1 _inst_5] (f : MonoidHom.{u1, u3} M N _inst_1 _inst_4) (s : S) (x : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)), Eq.{succ u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) => N) x) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (MonoidHom.{u1, u3} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) (fun (_x : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) => N) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} (MonoidHom.{u1, u3} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (MulOneClass.toMul.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s)) (MulOneClass.toMul.{u3} N _inst_4) (MonoidHomClass.toMulHomClass.{max u1 u3, u1, u3} (MonoidHom.{u1, u3} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4 (MonoidHom.monoidHomClass.{u1, u3} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M S (SetLike.instMembership.{u2, u1} S M _inst_5) x s)) N (SubmonoidClass.toMulOneClass.{u1, u2} M _inst_1 S _inst_5 _inst_6 s) _inst_4))) (MonoidHom.restrict.{u1, u3, u2} M _inst_1 N S _inst_4 _inst_5 _inst_6 f s) x) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (MonoidHom.{u1, u3} M N _inst_1 _inst_4) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} (MonoidHom.{u1, u3} M N _inst_1 _inst_4) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u3} N _inst_4) (MonoidHomClass.toMulHomClass.{max u1 u3, u1, u3} (MonoidHom.{u1, u3} M N _inst_1 _inst_4) M N _inst_1 _inst_4 (MonoidHom.monoidHomClass.{u1, u3} M N _inst_1 _inst_4))) f (Subtype.val.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Set.{u1} M) (Set.instMembershipSet.{u1} M) x (SetLike.coe.{u2, u1} S M _inst_5 s)) x))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.restrict_apply MonoidHom.restrict_applyₓ'. -/
 @[simp, to_additive]
 theorem restrict_apply {N S : Type _} [MulOneClass N] [SetLike S M] [SubmonoidClass S M]
@@ -1828,7 +1828,7 @@ theorem restrict_mrange (f : M →* N) : (f.restrict S).mrange = S.map f := by
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {S : Type.{u3}} [_inst_4 : SetLike.{u3, u2} S N] [_inst_5 : SubmonoidClass.{u3, u2} S N _inst_2 _inst_4] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2) (s : S), (forall (x : M), Membership.Mem.{u2, u3} N S (SetLike.hasMem.{u3, u2} S N _inst_4) (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) s) -> (MonoidHom.{u1, u2} M (coeSort.{succ u3, succ (succ u2)} S Type.{u2} (SetLike.hasCoeToSort.{u3, u2} S N _inst_4) s) _inst_1 (SubmonoidClass.toMulOneClass.{u2, u3} N _inst_2 S _inst_4 _inst_5 s))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {S : Type.{u3}} [_inst_4 : SetLike.{u3, u2} S N] [_inst_5 : SubmonoidClass.{u3, u2} S N _inst_2 _inst_4] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2) (s : S), (forall (x : M), Membership.mem.{u2, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) S (SetLike.instMembership.{u3, u2} S N _inst_4) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, 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 u1 u2, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u1 u2, 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))) f x) s) -> (MonoidHom.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u3} N S (SetLike.instMembership.{u3, u2} S N _inst_4) x s)) _inst_1 (SubmonoidClass.toMulOneClass.{u2, u3} N _inst_2 S _inst_4 _inst_5 s))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {S : Type.{u3}} [_inst_4 : SetLike.{u3, u2} S N] [_inst_5 : SubmonoidClass.{u3, u2} S N _inst_2 _inst_4] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2) (s : S), (forall (x : M), Membership.mem.{u2, u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) S (SetLike.instMembership.{u3, u2} S N _inst_4) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, 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 u1 u2, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u1 u2, 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))) f x) s) -> (MonoidHom.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u3} N S (SetLike.instMembership.{u3, u2} S N _inst_4) x s)) _inst_1 (SubmonoidClass.toMulOneClass.{u2, u3} N _inst_2 S _inst_4 _inst_5 s))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.cod_restrict MonoidHom.codRestrictₓ'. -/
 /-- Restriction of a monoid hom to a submonoid of the codomain. -/
 @[to_additive "Restriction of an `add_monoid` hom to an `add_submonoid` of the codomain.",
@@ -1858,7 +1858,7 @@ def mrangeRestrict {N} [MulOneClass N] (f : M →* N) : M →* f.mrange :=
 lean 3 declaration is
   forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {N : Type.{u2}} [_inst_4 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_4) (x : M), Eq.{succ u2} N ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_4) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_4) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_4) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_4) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)))))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_4) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (fun (_x : MonoidHom.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_4) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) => M -> (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_4) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (MonoidHom.hasCoeToFun.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_4) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.setLike.{u2} N _inst_4)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (MonoidHom.mrangeRestrict.{u1, u2} M _inst_1 N _inst_4 f) x)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_4) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_4) f x)
 but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {N : Type.{u2}} [_inst_4 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_4) (x : M), Eq.{succ u2} N (Subtype.val.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Set.{u2} N) (Set.instMembershipSet.{u2} N) x (SetLike.coe.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4) (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) (MonoidHom.monoidHomClass.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))))) (MonoidHom.mrangeRestrict.{u1, u2} M _inst_1 N _inst_4 f) x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_4) 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 _inst_1 _inst_4) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_4) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_4) M N _inst_1 _inst_4 (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4))) f x)
+  forall {M : Type.{u1}} [_inst_1 : MulOneClass.{u1} M] {N : Type.{u2}} [_inst_4 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_4) (x : M), Eq.{succ u2} N (Subtype.val.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Set.{u2} N) (Set.instMembershipSet.{u2} N) x (SetLike.coe.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4) (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f)) (MonoidHom.monoidHomClass.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_4) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_4) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_4)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_4 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_4 (MonoidHom.{u1, u2} M N _inst_1 _inst_4) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4) f))))) (MonoidHom.mrangeRestrict.{u1, u2} M _inst_1 N _inst_4 f) x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_4) 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 _inst_1 _inst_4) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_4) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_4) M N _inst_1 _inst_4 (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_4))) f x)
 Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_mrange_restrict MonoidHom.coe_mrangeRestrictₓ'. -/
 @[simp, to_additive]
 theorem coe_mrangeRestrict {N} [MulOneClass N] (f : M →* N) (x : M) :
@@ -1871,7 +1871,7 @@ theorem coe_mrangeRestrict {N} [MulOneClass N] (f : M →* N) (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), Function.Surjective.{succ u1, succ u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_2 (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f))) (fun (_x : MonoidHom.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_2 (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f))) => M -> (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f))) (MonoidHom.hasCoeToFun.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)) _inst_1 (Submonoid.toMulOneClass.{u2} N _inst_2 (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f))) (MonoidHom.mrangeRestrict.{u1, u2} M _inst_1 N _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), Function.Surjective.{succ u2, succ u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} 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 (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f)) (MonoidHom.monoidHomClass.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))))) (MonoidHom.mrangeRestrict.{u2, u1} M _inst_1 N _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), Function.Surjective.{succ u2, succ u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} 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 (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f)) (MonoidHom.monoidHomClass.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))) _inst_1 (Submonoid.toMulOneClass.{u1} N _inst_2 (MonoidHom.mrange.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f))))) (MonoidHom.mrangeRestrict.{u2, u1} M _inst_1 N _inst_2 f))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.mrange_restrict_surjective MonoidHom.mrangeRestrict_surjectiveₓ'. -/
 @[to_additive]
 theorem mrangeRestrict_surjective (f : M →* N) : Function.Surjective f.mrangeRestrict :=
@@ -1896,7 +1896,7 @@ def mker (f : F) : Submonoid M :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F) {x : M}, Iff (Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x (MonoidHom.mker.{u1, u2, u3} M N _inst_1 _inst_2 F mc 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) (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 mc))) f 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.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) {x : M}, Iff (Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x (MonoidHom.mker.{u3, u2, u1} M N _inst_1 _inst_2 F mc f)) (Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) 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) _inst_2))))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F) {x : M}, Iff (Membership.mem.{u3, u3} M (Submonoid.{u3} M _inst_1) (SetLike.instMembership.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1)) x (MonoidHom.mker.{u3, u2, u1} M N _inst_1 _inst_2 F mc f)) (Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) 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) _inst_2))))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.mem_mker MonoidHom.mem_mkerₓ'. -/
 @[to_additive]
 theorem mem_mker (f : F) {x : M} : x ∈ mker f ↔ f x = 1 :=
@@ -1908,7 +1908,7 @@ theorem mem_mker (f : F) {x : M} : x ∈ mker f ↔ f x = 1 :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), Eq.{succ u1} (Set.{u1} M) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) (MonoidHom.mker.{u1, u2, u3} M N _inst_1 _inst_2 F mc f)) (Set.preimage.{u1, 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) (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 mc))) f) (Singleton.singleton.{u2, u2} N (Set.{u2} N) (Set.hasSingleton.{u2} N) (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.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F), Eq.{succ u3} (Set.{u3} M) (SetLike.coe.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1) (MonoidHom.mker.{u3, u2, u1} M N _inst_1 _inst_2 F mc f)) (Set.preimage.{u3, u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f) (Singleton.singleton.{u2, u2} N (Set.{u2} N) (Set.instSingletonSet.{u2} N) (OfNat.ofNat.{u2} N 1 (One.toOfNat1.{u2} N (MulOneClass.toOne.{u2} N _inst_2)))))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (f : F), Eq.{succ u3} (Set.{u3} M) (SetLike.coe.{u3, u3} (Submonoid.{u3} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u3} M _inst_1) (MonoidHom.mker.{u3, u2, u1} M N _inst_1 _inst_2 F mc f)) (Set.preimage.{u3, u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f) (Singleton.singleton.{u2, u2} N (Set.{u2} N) (Set.instSingletonSet.{u2} N) (OfNat.ofNat.{u2} N 1 (One.toOfNat1.{u2} N (MulOneClass.toOne.{u2} N _inst_2)))))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_mker MonoidHom.coe_mkerₓ'. -/
 @[to_additive]
 theorem coe_mker (f : F) : (mker f : Set M) = (f : M → N) ⁻¹' {1} :=
@@ -2090,7 +2090,7 @@ def submonoidMap (f : M →* N) (M' : Submonoid M) : M' →* M'.map 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) (M' : Submonoid.{u1} M _inst_1), Function.Surjective.{succ u1, succ u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) M') (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M')) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) M') (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M')) (Submonoid.toMulOneClass.{u1} M _inst_1 M') (Submonoid.toMulOneClass.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M'))) (fun (_x : MonoidHom.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) M') (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M')) (Submonoid.toMulOneClass.{u1} M _inst_1 M') (Submonoid.toMulOneClass.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M'))) => (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) M') -> (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M'))) (MonoidHom.hasCoeToFun.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) M') (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M')) (Submonoid.toMulOneClass.{u1} M _inst_1 M') (Submonoid.toMulOneClass.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f M'))) (MonoidHom.submonoidMap.{u1, u2} M N _inst_1 _inst_2 f M'))
 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) (M' : Submonoid.{u2} M _inst_1), Function.Surjective.{succ u2, succ u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (MulOneClass.toMul.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Submonoid.toMulOneClass.{u2} M _inst_1 M')) (MulOneClass.toMul.{u1} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M')) (MonoidHom.monoidHomClass.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))))) (MonoidHom.submonoidMap.{u2, u1} M N _inst_1 _inst_2 f M'))
+  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) (M' : Submonoid.{u2} M _inst_1), Function.Surjective.{succ u2, succ u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (MulOneClass.toMul.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Submonoid.toMulOneClass.{u2} M _inst_1 M')) (MulOneClass.toMul.{u1} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M')) (MonoidHom.monoidHomClass.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))) (Submonoid.toMulOneClass.{u2} M _inst_1 M') (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) f M'))))) (MonoidHom.submonoidMap.{u2, u1} M N _inst_1 _inst_2 f M'))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.submonoid_map_surjective MonoidHom.submonoidMap_surjectiveₓ'. -/
 @[to_additive]
 theorem submonoidMap_surjective (f : M →* N) (M' : Submonoid M) :
@@ -2331,7 +2331,7 @@ def submonoidCongr (h : S = T) : S ≃* T :=
 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 : N -> M}, (Function.LeftInverse.{succ u1, succ u2} M N 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)) -> (MulEquiv.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)) (MulOneClass.toHasMul.{u1} M _inst_1) (Submonoid.mul.{u2} N _inst_2 (MonoidHom.mrange.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)))
 but is expected to have type
-  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 : N -> M}, (Function.LeftInverse.{succ u1, succ u2} M N g (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, 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 u1 u2, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u1 u2, 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))) f)) -> (MulEquiv.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f))) (MulOneClass.toMul.{u1} M _inst_1) (Submonoid.mul.{u2} N _inst_2 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)))
+  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 : N -> M}, (Function.LeftInverse.{succ u1, succ u2} M N g (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, 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 u1 u2, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u1 u2, 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))) f)) -> (MulEquiv.{u1, u2} M (Subtype.{succ u2} N (fun (x : N) => Membership.mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u2} N _inst_2)) x (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f))) (MulOneClass.toMul.{u1} M _inst_1) (Submonoid.mul.{u2} N _inst_2 (MonoidHom.mrange.{u1, u2, max u1 u2} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) f)))
 Case conversion may be inaccurate. Consider using '#align mul_equiv.of_left_inverse' MulEquiv.ofLeftInverse'ₓ'. -/
 -- this name is primed so that the version to `f.range` instead of `f.mrange` can be unprimed.
 /-- A monoid homomorphism `f : M →* N` with a left-inverse `g : N → M` defines a multiplicative
@@ -2373,7 +2373,7 @@ def submonoidMap (e : M ≃* N) (S : Submonoid M) : S ≃* S.map e.toMonoidHom :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (e : MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (S : Submonoid.{u1} M _inst_1) (g : coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S), Eq.{succ u2} N ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)))))) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MulEquiv.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S))) (fun (_x : MulEquiv.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S))) => (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) -> (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S))) (MulEquiv.hasCoeToFun.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S))) (MulEquiv.submonoidMap.{u1, u2} M N _inst_1 _inst_2 e S) g)) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (fun (_x : MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) => M -> N) (MulEquiv.hasCoeToFun.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) e ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S))))) g))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (e : MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) (S : Submonoid.{u2} M _inst_1) (g : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)), Eq.{succ u1} N (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (MulOneClass.toMul.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u2} M _inst_1 S)) (MulOneClass.toMul.{u1} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.toMulOneClass.{u2} M _inst_1 S) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.toMulOneClass.{u2} M _inst_1 S) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)))))) (MulEquiv.submonoidMap.{u2, u1} M N _inst_1 _inst_2 e S) g)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{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} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))))) e (Subtype.val.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Set.{u2} M) (Set.instMembershipSet.{u2} M) x (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) g))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (e : MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) (S : Submonoid.{u2} M _inst_1) (g : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)), Eq.{succ u1} N (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (MulOneClass.toMul.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u2} M _inst_1 S)) (MulOneClass.toMul.{u1} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.toMulOneClass.{u2} M _inst_1 S) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.toMulOneClass.{u2} M _inst_1 S) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)))))) (MulEquiv.submonoidMap.{u2, u1} M N _inst_1 _inst_2 e S) g)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{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} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))))) e (Subtype.val.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Set.{u2} M) (Set.instMembershipSet.{u2} M) x (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) g))
 Case conversion may be inaccurate. Consider using '#align mul_equiv.coe_submonoid_map_apply MulEquiv.coe_submonoidMap_applyₓ'. -/
 @[simp, to_additive]
 theorem coe_submonoidMap_apply (e : M ≃* N) (S : Submonoid M) (g : S) :
@@ -2386,7 +2386,7 @@ theorem coe_submonoidMap_apply (e : M ≃* N) (S : Submonoid M) (g : S) :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (e : MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (S : Submonoid.{u1} M _inst_1) (g : coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)), Eq.{succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S)) (fun (_x : MulEquiv.{u2, u1} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S)) => (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) -> (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S)) (MulEquiv.hasCoeToFun.{u2, u1} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S)) (MulEquiv.symm.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (MulEquiv.submonoidMap.{u1, u2} M N _inst_1 _inst_2 e S)) g) (Subtype.mk.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (fun (_x : MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) => N -> M) (MulEquiv.hasCoeToFun.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (MulEquiv.symm.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g)) (Iff.mp (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (fun (_x : MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) => N -> M) (MulEquiv.hasCoeToFun.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (MulEquiv.symm.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S)) (Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (fun (_x : MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) => N -> M) (MulEquiv.hasCoeToFun.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (MulEquiv.symm.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g)) S) (SetLike.mem_coe.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1) S (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (fun (_x : MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) => N -> M) (MulEquiv.hasCoeToFun.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (MulEquiv.symm.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g))) (Iff.mp (Membership.Mem.{u2, u2} N (Set.{u2} N) (Set.hasMem.{u2} N) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g) (Set.image.{u1, u2} M N (coeFn.{max 1 (max (succ u1) (succ u2)) (succ u2) (succ u1), max (succ u1) (succ u2)} (Equiv.{succ u1, succ u2} M N) (fun (_x : Equiv.{succ u1, succ u2} M N) => M -> N) (Equiv.hasCoeToFun.{succ u1, succ u2} M N) (MulEquiv.toEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S))) (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} N M) (fun (_x : Equiv.{succ u2, succ u1} N M) => N -> M) (Equiv.hasCoeToFun.{succ u2, succ u1} N M) (Equiv.symm.{succ u1, succ u2} M N (MulEquiv.toEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e)) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S)) (Set.mem_image_equiv.{u1, u2} M N ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S) (MulEquiv.toEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g)) (Subtype.property.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) g))))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (e : MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) (S : Submonoid.{u2} M _inst_1) (g : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) => Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) g) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (fun (_x : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) => Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (MulOneClass.toMul.{u1} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (MulOneClass.toMul.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u2} M _inst_1 S)) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.toMulOneClass.{u2} M _inst_1 S) (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.toMulOneClass.{u2} M _inst_1 S) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S))))) (MulEquiv.symm.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (MulEquiv.submonoidMap.{u2, u1} M N _inst_1 _inst_2 e S)) g) (Subtype.mk.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : N) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (Iff.mp (Membership.mem.{u2, u2} M (Set.{u2} M) (Set.instMembershipSet.{u2} M) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : N) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) (Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : N) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) S) (SetLike.mem_coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : N) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g))) (Iff.mp (Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g) (Set.image.{u2, u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (Equiv.{succ u2, succ u1} M N) M (fun (_x : M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : M) => N) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} M N) (MulEquiv.toEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e)) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S))) (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : N) => M) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (Set.{u2} M) (Set.instMembershipSet.{u2} M) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (Equiv.{succ u1, succ u2} N M) N (fun (_x : N) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : N) => M) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u2} N M) (Equiv.symm.{succ u2, succ u1} M N (MulEquiv.toEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e)) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) (Set.mem_image_equiv.{u1, u2} M N (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S) (MulEquiv.toEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (Subtype.property.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S)) g))))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (e : MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) (S : Submonoid.{u2} M _inst_1) (g : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) => Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) g) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (fun (_x : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) => Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (MulOneClass.toMul.{u1} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (MulOneClass.toMul.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u2} M _inst_1 S)) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.toMulOneClass.{u2} M _inst_1 S) (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.toMulOneClass.{u2} M _inst_1 S) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S))))) (MulEquiv.symm.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (MulEquiv.submonoidMap.{u2, u1} M N _inst_1 _inst_2 e S)) g) (Subtype.mk.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : N) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (Iff.mp (Membership.mem.{u2, u2} M (Set.{u2} M) (Set.instMembershipSet.{u2} M) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : N) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) (Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : N) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) S) (SetLike.mem_coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : N) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g))) (Iff.mp (Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g) (Set.image.{u2, u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (Equiv.{succ u2, succ u1} M N) M (fun (_x : M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : M) => N) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} M N) (MulEquiv.toEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e)) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S))) (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : N) => M) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (Set.{u2} M) (Set.instMembershipSet.{u2} M) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (Equiv.{succ u1, succ u2} N M) N (fun (_x : N) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : N) => M) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u2} N M) (Equiv.symm.{succ u2, succ u1} M N (MulEquiv.toEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e)) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) (Set.mem_image_equiv.{u1, u2} M N (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S) (MulEquiv.toEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (Subtype.property.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S)) g))))
 Case conversion may be inaccurate. Consider using '#align mul_equiv.submonoid_map_symm_apply MulEquiv.submonoidMap_symm_applyₓ'. -/
 @[simp, to_additive AddEquiv.add_submonoid_map_symm_apply]
 theorem submonoidMap_symm_apply (e : M ≃* N) (S : Submonoid M) (g : S.map (e : M →* N)) :
Diff
@@ -2369,13 +2369,25 @@ def submonoidMap (e : M ≃* N) (S : Submonoid M) : S ≃* S.map e.toMonoidHom :
 #align mul_equiv.submonoid_map MulEquiv.submonoidMap
 #align add_equiv.add_submonoid_map AddEquiv.addSubmonoidMap
 
+/- warning: mul_equiv.coe_submonoid_map_apply -> MulEquiv.coe_submonoidMap_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] (e : MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (S : Submonoid.{u1} M _inst_1) (g : coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S), Eq.{succ u2} N ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)))))) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MulEquiv.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S))) (fun (_x : MulEquiv.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S))) => (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) -> (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S))) (MulEquiv.hasCoeToFun.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S))) (MulEquiv.submonoidMap.{u1, u2} M N _inst_1 _inst_2 e S) g)) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (fun (_x : MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) => M -> N) (MulEquiv.hasCoeToFun.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) e ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S))))) g))
+but is expected to have type
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (e : MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) (S : Submonoid.{u2} M _inst_1) (g : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)), Eq.{succ u1} N (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (MulOneClass.toMul.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u2} M _inst_1 S)) (MulOneClass.toMul.{u1} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.toMulOneClass.{u2} M _inst_1 S) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.toMulOneClass.{u2} M _inst_1 S) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)))))) (MulEquiv.submonoidMap.{u2, u1} M N _inst_1 _inst_2 e S) g)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{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} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))))) e (Subtype.val.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Set.{u2} M) (Set.instMembershipSet.{u2} M) x (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) g))
+Case conversion may be inaccurate. Consider using '#align mul_equiv.coe_submonoid_map_apply MulEquiv.coe_submonoidMap_applyₓ'. -/
 @[simp, to_additive]
 theorem coe_submonoidMap_apply (e : M ≃* N) (S : Submonoid M) (g : S) :
     ((submonoidMap e S g : S.map (e : M →* N)) : N) = e g :=
   rfl
 #align mul_equiv.coe_submonoid_map_apply MulEquiv.coe_submonoidMap_apply
-#align add_equiv.coe_add_submonoid_map_apply AddEquiv.coe_add_submonoid_map_apply
+#align add_equiv.coe_add_submonoid_map_apply AddEquiv.coe_addSubmonoidMap_apply
 
+/- warning: mul_equiv.submonoid_map_symm_apply -> MulEquiv.submonoidMap_symm_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] (e : MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (S : Submonoid.{u1} M _inst_1) (g : coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)), Eq.{succ u1} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S)) (fun (_x : MulEquiv.{u2, u1} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S)) => (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) -> (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S)) (MulEquiv.hasCoeToFun.{u2, u1} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S)) (MulEquiv.symm.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 e) S)) (MulEquiv.submonoidMap.{u1, u2} M N _inst_1 _inst_2 e S)) g) (Subtype.mk.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) x S) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (fun (_x : MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) => N -> M) (MulEquiv.hasCoeToFun.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (MulEquiv.symm.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g)) (Iff.mp (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (fun (_x : MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) => N -> M) (MulEquiv.hasCoeToFun.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (MulEquiv.symm.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S)) (Membership.Mem.{u1, u1} M (Submonoid.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (fun (_x : MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) => N -> M) (MulEquiv.hasCoeToFun.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (MulEquiv.symm.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g)) S) (SetLike.mem_coe.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1) S (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (fun (_x : MulEquiv.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) => N -> M) (MulEquiv.hasCoeToFun.{u2, u1} N M (MulOneClass.toHasMul.{u2} N _inst_2) (MulOneClass.toHasMul.{u1} M _inst_1)) (MulEquiv.symm.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g))) (Iff.mp (Membership.Mem.{u2, u2} N (Set.{u2} N) (Set.hasMem.{u2} N) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g) (Set.image.{u1, u2} M N (coeFn.{max 1 (max (succ u1) (succ u2)) (succ u2) (succ u1), max (succ u1) (succ u2)} (Equiv.{succ u1, succ u2} M N) (fun (_x : Equiv.{succ u1, succ u2} M N) => M -> N) (Equiv.hasCoeToFun.{succ u1, succ u2} M N) (MulEquiv.toEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S))) (Membership.Mem.{u1, u1} M (Set.{u1} M) (Set.hasMem.{u1} M) (coeFn.{max 1 (max (succ u2) (succ u1)) (succ u1) (succ u2), max (succ u2) (succ u1)} (Equiv.{succ u2, succ u1} N M) (fun (_x : Equiv.{succ u2, succ u1} N M) => N -> M) (Equiv.hasCoeToFun.{succ u2, succ u1} N M) (Equiv.symm.{succ u1, succ u2} M N (MulEquiv.toEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e)) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g)) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S)) (Set.mem_image_equiv.{u1, u2} M N ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Submonoid.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Submonoid.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)))) S) (MulEquiv.toEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) e) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)))))) g)) (Subtype.property.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Submonoid.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) x (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) g))))
+but is expected to have type
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (e : MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) (S : Submonoid.{u2} M _inst_1) (g : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) => Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) g) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (fun (_x : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) => Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (MulOneClass.toMul.{u1} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (MulOneClass.toMul.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u2} M _inst_1 S)) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.toMulOneClass.{u2} M _inst_1 S) (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.toMulOneClass.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.toMulOneClass.{u2} M _inst_1 S) (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (Submonoid.mul.{u2} M _inst_1 S))))) (MulEquiv.symm.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MulEquiv.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 e) S)) (MulEquiv.submonoidMap.{u2, u1} M N _inst_1 _inst_2 e S)) g) (Subtype.mk.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : N) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (Iff.mp (Membership.mem.{u2, u2} M (Set.{u2} M) (Set.instMembershipSet.{u2} M) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : N) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) (Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : N) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) S) (SetLike.mem_coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : N) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquivClass.instMonoidHomClass.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1)) N M _inst_2 _inst_1 (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M (MulOneClass.toMul.{u1} N _inst_2) (MulOneClass.toMul.{u2} M _inst_1))))) (MulEquiv.symm.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g))) (Iff.mp (Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g) (Set.image.{u2, u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (Equiv.{succ u2, succ u1} M N) M (fun (_x : M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : M) => N) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u1} M N) (MulEquiv.toEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e)) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S))) (Membership.mem.{u2, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : N) => M) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (Set.{u2} M) (Set.instMembershipSet.{u2} M) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (Equiv.{succ u1, succ u2} N M) N (fun (_x : N) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : N) => M) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u2} N M) (Equiv.symm.{succ u2, succ u1} M N (MulEquiv.toEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e)) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S)) (Set.mem_image_equiv.{u1, u2} M N (SetLike.coe.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1) S) (MulEquiv.toEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) e) (Subtype.val.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Set.{u1} N) (Set.instMembershipSet.{u1} N) x (SetLike.coe.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2) (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) g)) (Subtype.property.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S)) g))))
+Case conversion may be inaccurate. Consider using '#align mul_equiv.submonoid_map_symm_apply MulEquiv.submonoidMap_symm_applyₓ'. -/
 @[simp, to_additive AddEquiv.add_submonoid_map_symm_apply]
 theorem submonoidMap_symm_apply (e : M ≃* N) (S : Submonoid M) (g : S.map (e : M →* N)) :
     (e.submonoidMap S).symm g = ⟨e.symm g, SetLike.mem_coe.1 <| Set.mem_image_equiv.1 g.2⟩ :=
@@ -2385,6 +2397,12 @@ theorem submonoidMap_symm_apply (e : M ≃* N) (S : Submonoid M) (g : S.map (e :
 
 end MulEquiv
 
+/- warning: submonoid.equiv_map_of_injective_coe_mul_equiv -> Submonoid.equivMapOfInjective_coe_mulEquiv 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] (S : Submonoid.{u1} M _inst_1) (e : MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)), Eq.{max (succ u1) (succ u2)} (MulEquiv.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Submonoid.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Submonoid.{u1} M _inst_1) M (Submonoid.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Submonoid.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Submonoid.{u2} N _inst_2) N (Submonoid.setLike.{u2} N _inst_2)) (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S)) (Submonoid.mul.{u1} M _inst_1 S) (Submonoid.mul.{u2} N _inst_2 (Submonoid.map.{u1, u2, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2) ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) S))) (Submonoid.equivMapOfInjective.{u1, u2} M N _inst_1 _inst_2 S ((fun (a : Sort.{max (succ u1) (succ u2)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u1) (succ u2), max (succ u2) (succ u1)} a b] => self.0) (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, max u1 u2} M N (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.monoidHomClass.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)))))) e) (EquivLike.injective.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N (MulEquivClass.toEquivLike.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) (MulEquiv.mulEquivClass.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2))) e)) (MulEquiv.submonoidMap.{u1, u2} M N _inst_1 _inst_2 e S)
+but is expected to have type
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (S : Submonoid.{u2} M _inst_1) (e : MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)), Eq.{max (succ u2) (succ u1)} (MulEquiv.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Submonoid.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Submonoid.{u2} M _inst_1) M (Submonoid.instSetLikeSubmonoid.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Submonoid.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Submonoid.{u1} N _inst_2) N (Submonoid.instSetLikeSubmonoid.{u1} N _inst_2)) x (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) (Submonoid.mul.{u2} M _inst_1 S) (Submonoid.mul.{u1} N _inst_2 (Submonoid.map.{u2, u1, max u2 u1} M N _inst_1 _inst_2 (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) S))) (Submonoid.equivMapOfInjective.{u2, u1} M N _inst_1 _inst_2 S (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) _inst_1 _inst_2 (MulEquivClass.instMonoidHomClass.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N _inst_1 _inst_2 (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e) (EquivLike.injective.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N (MulEquivClass.toEquivLike.{max u2 u1, u2, u1} (MulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MulEquiv.instMulEquivClassMulEquiv.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2))) e)) (MulEquiv.submonoidMap.{u2, u1} M N _inst_1 _inst_2 e S)
+Case conversion may be inaccurate. Consider using '#align submonoid.equiv_map_of_injective_coe_mul_equiv Submonoid.equivMapOfInjective_coe_mulEquivₓ'. -/
 @[simp, to_additive]
 theorem Submonoid.equivMapOfInjective_coe_mulEquiv (e : M ≃* N) :
     S.equivMapOfInjective (e : M →* N) (EquivLike.injective e) = e.submonoidMap S :=
@@ -2392,7 +2410,7 @@ theorem Submonoid.equivMapOfInjective_coe_mulEquiv (e : M ≃* N) :
   ext
   rfl
 #align submonoid.equiv_map_of_injective_coe_mul_equiv Submonoid.equivMapOfInjective_coe_mulEquiv
-#align add_submonoid.equiv_map_of_injective_coe_add_equiv AddSubmonoid.equiv_map_of_injective_coe_add_equiv
+#align add_submonoid.equiv_map_of_injective_coe_add_equiv AddSubmonoid.equivMapOfInjective_coe_addEquiv
 
 section Actions
 
Diff
@@ -496,9 +496,9 @@ theorem comap_map_comap {S : Submonoid N} {f : F} : ((S.comap f).map f).comap f
 
 /- warning: submonoid.map_sup -> Submonoid.map_sup 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (S : Submonoid.{u1} M _inst_1) (T : Submonoid.{u1} M _inst_1) (f : F), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (HasSup.sup.{u1} (Submonoid.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Submonoid.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.completeLattice.{u1} M _inst_1)))) S T)) (HasSup.sup.{u2} (Submonoid.{u2} N _inst_2) (SemilatticeSup.toHasSup.{u2} (Submonoid.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.completeLattice.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (S : Submonoid.{u1} M _inst_1) (T : Submonoid.{u1} M _inst_1) (f : F), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Sup.sup.{u1} (Submonoid.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Submonoid.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.completeLattice.{u1} M _inst_1)))) S T)) (Sup.sup.{u2} (Submonoid.{u2} N _inst_2) (SemilatticeSup.toHasSup.{u2} (Submonoid.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.completeLattice.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (S : Submonoid.{u3} M _inst_1) (T : Submonoid.{u3} M _inst_1) (f : F), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (HasSup.sup.{u3} (Submonoid.{u3} M _inst_1) (SemilatticeSup.toHasSup.{u3} (Submonoid.{u3} M _inst_1) (Lattice.toSemilatticeSup.{u3} (Submonoid.{u3} M _inst_1) (CompleteLattice.toLattice.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1)))) S T)) (HasSup.sup.{u2} (Submonoid.{u2} N _inst_2) (SemilatticeSup.toHasSup.{u2} (Submonoid.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f T))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] (S : Submonoid.{u3} M _inst_1) (T : Submonoid.{u3} M _inst_1) (f : F), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Sup.sup.{u3} (Submonoid.{u3} M _inst_1) (SemilatticeSup.toSup.{u3} (Submonoid.{u3} M _inst_1) (Lattice.toSemilatticeSup.{u3} (Submonoid.{u3} M _inst_1) (CompleteLattice.toLattice.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1)))) S T)) (Sup.sup.{u2} (Submonoid.{u2} N _inst_2) (SemilatticeSup.toSup.{u2} (Submonoid.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f T))
 Case conversion may be inaccurate. Consider using '#align submonoid.map_sup Submonoid.map_supₓ'. -/
 @[to_additive]
 theorem map_sup (S T : Submonoid M) (f : F) : (S ⊔ T).map f = S.map f ⊔ T.map f :=
@@ -520,9 +520,9 @@ theorem map_supᵢ {ι : Sort _} (f : F) (s : ι → Submonoid M) : (supᵢ s).m
 
 /- warning: submonoid.comap_inf -> Submonoid.comap_inf 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (S : Submonoid.{u2} N _inst_2) (T : Submonoid.{u2} N _inst_2) (f : F), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (HasInf.inf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasInf.{u2} N _inst_2) S T)) (HasInf.inf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasInf.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (S : Submonoid.{u2} N _inst_2) (T : Submonoid.{u2} N _inst_2) (f : F), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Inf.inf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasInf.{u2} N _inst_2) S T)) (Inf.inf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasInf.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] (S : Submonoid.{u3} N _inst_2) (T : Submonoid.{u3} N _inst_2) (f : F), Eq.{succ u2} (Submonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (HasInf.inf.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instHasInfSubmonoid.{u3} N _inst_2) S T)) (HasInf.inf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instHasInfSubmonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f T))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] (S : Submonoid.{u3} N _inst_2) (T : Submonoid.{u3} N _inst_2) (f : F), Eq.{succ u2} (Submonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Inf.inf.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instInfSubmonoid.{u3} N _inst_2) S T)) (Inf.inf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instInfSubmonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f T))
 Case conversion may be inaccurate. Consider using '#align submonoid.comap_inf Submonoid.comap_infₓ'. -/
 @[to_additive]
 theorem comap_inf (S T : Submonoid N) (f : F) : (S ⊓ T).comap f = S.comap f ⊓ T.comap f :=
@@ -634,9 +634,9 @@ theorem map_injective_of_injective : Function.Injective (map f) :=
 
 /- warning: submonoid.comap_inf_map_of_injective -> Submonoid.comap_inf_map_of_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] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (forall (S : Submonoid.{u1} M _inst_1) (T : Submonoid.{u1} M _inst_1), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (HasInf.inf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasInf.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))) (HasInf.inf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasInf.{u1} M _inst_1) S T))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (forall (S : Submonoid.{u1} M _inst_1) (T : Submonoid.{u1} M _inst_1), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Inf.inf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasInf.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))) (Inf.inf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasInf.{u1} M _inst_1) S T))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} M _inst_1) (T : Submonoid.{u3} M _inst_1), Eq.{succ u3} (Submonoid.{u3} M _inst_1) (Submonoid.comap.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (HasInf.inf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instHasInfSubmonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f T))) (HasInf.inf.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instHasInfSubmonoid.{u3} M _inst_1) S T))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} M _inst_1) (T : Submonoid.{u3} M _inst_1), Eq.{succ u3} (Submonoid.{u3} M _inst_1) (Submonoid.comap.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Inf.inf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instInfSubmonoid.{u2} N _inst_2) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f T))) (Inf.inf.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instInfSubmonoid.{u3} M _inst_1) S T))
 Case conversion may be inaccurate. Consider using '#align submonoid.comap_inf_map_of_injective Submonoid.comap_inf_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_inf_map_of_injective (S T : Submonoid M) : (S.map f ⊓ T.map f).comap f = S ⊓ T :=
@@ -658,9 +658,9 @@ theorem comap_infᵢ_map_of_injective (S : ι → Submonoid M) : (⨅ i, (S i).m
 
 /- warning: submonoid.comap_sup_map_of_injective -> Submonoid.comap_sup_map_of_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] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (forall (S : Submonoid.{u1} M _inst_1) (T : Submonoid.{u1} M _inst_1), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (HasSup.sup.{u2} (Submonoid.{u2} N _inst_2) (SemilatticeSup.toHasSup.{u2} (Submonoid.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.completeLattice.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))) (HasSup.sup.{u1} (Submonoid.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Submonoid.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.completeLattice.{u1} M _inst_1)))) S T))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{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) (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 mc))) f)) -> (forall (S : Submonoid.{u1} M _inst_1) (T : Submonoid.{u1} M _inst_1), Eq.{succ u1} (Submonoid.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Sup.sup.{u2} (Submonoid.{u2} N _inst_2) (SemilatticeSup.toHasSup.{u2} (Submonoid.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.completeLattice.{u2} N _inst_2)))) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))) (Sup.sup.{u1} (Submonoid.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Submonoid.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.completeLattice.{u1} M _inst_1)))) S T))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} M _inst_1) (T : Submonoid.{u3} M _inst_1), Eq.{succ u3} (Submonoid.{u3} M _inst_1) (Submonoid.comap.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (HasSup.sup.{u2} (Submonoid.{u2} N _inst_2) (SemilatticeSup.toHasSup.{u2} (Submonoid.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f T))) (HasSup.sup.{u3} (Submonoid.{u3} M _inst_1) (SemilatticeSup.toHasSup.{u3} (Submonoid.{u3} M _inst_1) (Lattice.toSemilatticeSup.{u3} (Submonoid.{u3} M _inst_1) (CompleteLattice.toLattice.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1)))) S T))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u3, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Injective.{succ u3, succ u2} M N (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 _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} M _inst_1) (T : Submonoid.{u3} M _inst_1), Eq.{succ u3} (Submonoid.{u3} M _inst_1) (Submonoid.comap.{u3, u2, u1} M N _inst_1 _inst_2 F mc f (Sup.sup.{u2} (Submonoid.{u2} N _inst_2) (SemilatticeSup.toSup.{u2} (Submonoid.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u2} N _inst_2)))) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.map.{u3, u2, u1} M N _inst_1 _inst_2 F mc f T))) (Sup.sup.{u3} (Submonoid.{u3} M _inst_1) (SemilatticeSup.toSup.{u3} (Submonoid.{u3} M _inst_1) (Lattice.toSemilatticeSup.{u3} (Submonoid.{u3} M _inst_1) (CompleteLattice.toLattice.{u3} (Submonoid.{u3} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u3} M _inst_1)))) S T))
 Case conversion may be inaccurate. Consider using '#align submonoid.comap_sup_map_of_injective Submonoid.comap_sup_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_sup_map_of_injective (S T : Submonoid M) : (S.map f ⊔ T.map f).comap f = S ⊔ T :=
@@ -765,9 +765,9 @@ theorem comap_injective_of_surjective : Function.Injective (comap f) :=
 
 /- warning: submonoid.map_inf_comap_of_surjective -> Submonoid.map_inf_comap_of_surjective 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (forall (S : Submonoid.{u2} N _inst_2) (T : Submonoid.{u2} N _inst_2), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (HasInf.inf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasInf.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))) (HasInf.inf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasInf.{u2} N _inst_2) S T))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (forall (S : Submonoid.{u2} N _inst_2) (T : Submonoid.{u2} N _inst_2), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Inf.inf.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasInf.{u1} M _inst_1) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))) (Inf.inf.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasInf.{u2} N _inst_2) S T))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} N _inst_2) (T : Submonoid.{u3} N _inst_2), Eq.{succ u3} (Submonoid.{u3} N _inst_2) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (HasInf.inf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instHasInfSubmonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f T))) (HasInf.inf.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instHasInfSubmonoid.{u3} N _inst_2) S T))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} N _inst_2) (T : Submonoid.{u3} N _inst_2), Eq.{succ u3} (Submonoid.{u3} N _inst_2) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Inf.inf.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instInfSubmonoid.{u2} M _inst_1) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f T))) (Inf.inf.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instInfSubmonoid.{u3} N _inst_2) S T))
 Case conversion may be inaccurate. Consider using '#align submonoid.map_inf_comap_of_surjective Submonoid.map_inf_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_inf_comap_of_surjective (S T : Submonoid N) : (S.comap f ⊓ T.comap f).map f = S ⊓ T :=
@@ -789,9 +789,9 @@ theorem map_infᵢ_comap_of_surjective (S : ι → Submonoid N) : (⨅ i, (S i).
 
 /- warning: submonoid.map_sup_comap_of_surjective -> Submonoid.map_sup_comap_of_surjective 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 : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (forall (S : Submonoid.{u2} N _inst_2) (T : Submonoid.{u2} N _inst_2), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (HasSup.sup.{u1} (Submonoid.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Submonoid.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.completeLattice.{u1} M _inst_1)))) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))) (HasSup.sup.{u2} (Submonoid.{u2} N _inst_2) (SemilatticeSup.toHasSup.{u2} (Submonoid.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.completeLattice.{u2} N _inst_2)))) S T))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {F : Type.{u3}} [mc : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{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) (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 mc))) f)) -> (forall (S : Submonoid.{u2} N _inst_2) (T : Submonoid.{u2} N _inst_2), Eq.{succ u2} (Submonoid.{u2} N _inst_2) (Submonoid.map.{u1, u2, u3} M N _inst_1 _inst_2 F mc f (Sup.sup.{u1} (Submonoid.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Submonoid.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Submonoid.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.completeLattice.{u1} M _inst_1)))) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u1, u2, u3} M N _inst_1 _inst_2 F mc f T))) (Sup.sup.{u2} (Submonoid.{u2} N _inst_2) (SemilatticeSup.toHasSup.{u2} (Submonoid.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.completeLattice.{u2} N _inst_2)))) S T))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} N _inst_2) (T : Submonoid.{u3} N _inst_2), Eq.{succ u3} (Submonoid.{u3} N _inst_2) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (HasSup.sup.{u2} (Submonoid.{u2} M _inst_1) (SemilatticeSup.toHasSup.{u2} (Submonoid.{u2} M _inst_1) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1)))) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f T))) (HasSup.sup.{u3} (Submonoid.{u3} N _inst_2) (SemilatticeSup.toHasSup.{u3} (Submonoid.{u3} N _inst_2) (Lattice.toSemilatticeSup.{u3} (Submonoid.{u3} N _inst_2) (CompleteLattice.toLattice.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2)))) S T))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u3} N] {F : Type.{u1}} [mc : MonoidHomClass.{u1, u2, u3} F M N _inst_1 _inst_2] {f : F}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{succ u1, succ u2, succ u3} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u1, u2, u3} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u3} N _inst_2) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F M N _inst_1 _inst_2 mc)) f)) -> (forall (S : Submonoid.{u3} N _inst_2) (T : Submonoid.{u3} N _inst_2), Eq.{succ u3} (Submonoid.{u3} N _inst_2) (Submonoid.map.{u2, u3, u1} M N _inst_1 _inst_2 F mc f (Sup.sup.{u2} (Submonoid.{u2} M _inst_1) (SemilatticeSup.toSup.{u2} (Submonoid.{u2} M _inst_1) (Lattice.toSemilatticeSup.{u2} (Submonoid.{u2} M _inst_1) (CompleteLattice.toLattice.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instCompleteLatticeSubmonoid.{u2} M _inst_1)))) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f S) (Submonoid.comap.{u2, u3, u1} M N _inst_1 _inst_2 F mc f T))) (Sup.sup.{u3} (Submonoid.{u3} N _inst_2) (SemilatticeSup.toSup.{u3} (Submonoid.{u3} N _inst_2) (Lattice.toSemilatticeSup.{u3} (Submonoid.{u3} N _inst_2) (CompleteLattice.toLattice.{u3} (Submonoid.{u3} N _inst_2) (Submonoid.instCompleteLatticeSubmonoid.{u3} N _inst_2)))) S T))
 Case conversion may be inaccurate. Consider using '#align submonoid.map_sup_comap_of_surjective Submonoid.map_sup_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_sup_comap_of_surjective (S T : Submonoid N) : (S.comap f ⊔ T.comap f).map f = S ⊔ T :=
@@ -1510,9 +1510,9 @@ theorem map_inr (s : Submonoid N) : s.map (inr M N) = prod ⊥ s :=
 
 /- warning: submonoid.prod_bot_sup_bot_prod -> Submonoid.prod_bot_sup_bot_prod 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] (s : Submonoid.{u1} M _inst_1) (t : Submonoid.{u2} N _inst_2), Eq.{succ (max u1 u2)} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (HasSup.sup.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (SemilatticeSup.toHasSup.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Lattice.toSemilatticeSup.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (CompleteLattice.toLattice.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Submonoid.completeLattice.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2))))) (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 s (Bot.bot.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasBot.{u2} N _inst_2))) (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 (Bot.bot.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasBot.{u1} M _inst_1)) t)) (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 s t)
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (s : Submonoid.{u1} M _inst_1) (t : Submonoid.{u2} N _inst_2), Eq.{succ (max u1 u2)} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Sup.sup.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (SemilatticeSup.toHasSup.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Lattice.toSemilatticeSup.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (CompleteLattice.toLattice.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Submonoid.completeLattice.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2))))) (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 s (Bot.bot.{u2} (Submonoid.{u2} N _inst_2) (Submonoid.hasBot.{u2} N _inst_2))) (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 (Bot.bot.{u1} (Submonoid.{u1} M _inst_1) (Submonoid.hasBot.{u1} M _inst_1)) t)) (Submonoid.prod.{u1, u2} M N _inst_1 _inst_2 s t)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (s : Submonoid.{u2} M _inst_1) (t : Submonoid.{u1} N _inst_2), Eq.{max (succ u2) (succ u1)} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (HasSup.sup.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (SemilatticeSup.toHasSup.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Lattice.toSemilatticeSup.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (CompleteLattice.toLattice.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Submonoid.instCompleteLatticeSubmonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2))))) (Submonoid.prod.{u2, u1} M N _inst_1 _inst_2 s (Bot.bot.{u1} (Submonoid.{u1} N _inst_2) (Submonoid.instBotSubmonoid.{u1} N _inst_2))) (Submonoid.prod.{u2, u1} M N _inst_1 _inst_2 (Bot.bot.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instBotSubmonoid.{u2} M _inst_1)) t)) (Submonoid.prod.{u2, u1} M N _inst_1 _inst_2 s t)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (s : Submonoid.{u2} M _inst_1) (t : Submonoid.{u1} N _inst_2), Eq.{max (succ u2) (succ u1)} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Sup.sup.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (SemilatticeSup.toSup.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Lattice.toSemilatticeSup.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (CompleteLattice.toLattice.{max u2 u1} (Submonoid.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Submonoid.instCompleteLatticeSubmonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2))))) (Submonoid.prod.{u2, u1} M N _inst_1 _inst_2 s (Bot.bot.{u1} (Submonoid.{u1} N _inst_2) (Submonoid.instBotSubmonoid.{u1} N _inst_2))) (Submonoid.prod.{u2, u1} M N _inst_1 _inst_2 (Bot.bot.{u2} (Submonoid.{u2} M _inst_1) (Submonoid.instBotSubmonoid.{u2} M _inst_1)) t)) (Submonoid.prod.{u2, u1} M N _inst_1 _inst_2 s t)
 Case conversion may be inaccurate. Consider using '#align submonoid.prod_bot_sup_bot_prod Submonoid.prod_bot_sup_bot_prodₓ'. -/
 @[simp, to_additive prod_bot_sup_bot_prod]
 theorem prod_bot_sup_bot_prod (s : Submonoid M) (t : Submonoid N) :
@@ -2204,9 +2204,9 @@ theorem prod_eq_top_iff {s : Submonoid M} {t : Submonoid N} : s.Prod t = ⊤ ↔
 
 /- warning: submonoid.mrange_inl_sup_mrange_inr -> Submonoid.mrange_inl_sup_mrange_inr 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], Eq.{succ (max u1 u2)} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (HasSup.sup.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (SemilatticeSup.toHasSup.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Lattice.toSemilatticeSup.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (CompleteLattice.toLattice.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Submonoid.completeLattice.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2))))) (MonoidHom.mrange.{u1, max u1 u2, max u1 u2} M (Prod.{u1, u2} M N) _inst_1 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.{u1, max u1 u2} M (Prod.{u1, u2} M N) _inst_1 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u1, max u1 u2} M (Prod.{u1, u2} M N) _inst_1 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.inl.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.mrange.{u2, max u1 u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.{u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.inr.{u1, u2} M N _inst_1 _inst_2))) (Top.top.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Submonoid.hasTop.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N], Eq.{succ (max u1 u2)} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Sup.sup.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (SemilatticeSup.toHasSup.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Lattice.toSemilatticeSup.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (CompleteLattice.toLattice.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Submonoid.completeLattice.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2))))) (MonoidHom.mrange.{u1, max u1 u2, max u1 u2} M (Prod.{u1, u2} M N) _inst_1 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.{u1, max u1 u2} M (Prod.{u1, u2} M N) _inst_1 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u1, max u1 u2} M (Prod.{u1, u2} M N) _inst_1 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.inl.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.mrange.{u2, max u1 u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.{u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u2, max u1 u2} N (Prod.{u1, u2} M N) _inst_2 (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (MonoidHom.inr.{u1, u2} M N _inst_1 _inst_2))) (Top.top.{max u1 u2} (Submonoid.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{u1, u2} M N _inst_1 _inst_2)) (Submonoid.hasTop.{max u1 u2} (Prod.{u1, u2} M N) (Prod.mulOneClass.{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], Eq.{max (succ u2) (succ u1)} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (HasSup.sup.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (SemilatticeSup.toHasSup.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Lattice.toSemilatticeSup.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (CompleteLattice.toLattice.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Submonoid.instCompleteLatticeSubmonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2))))) (MonoidHom.mrange.{u2, max u2 u1, max u2 u1} M (Prod.{u2, u1} M N) _inst_1 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.{u2, max u1 u2} M (Prod.{u2, u1} M N) _inst_1 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u2, max u2 u1} M (Prod.{u2, u1} M N) _inst_1 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.inl.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.mrange.{u1, max u2 u1, max u2 u1} N (Prod.{u2, u1} M N) _inst_2 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.{u1, max u1 u2} N (Prod.{u2, u1} M N) _inst_2 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u1, max u2 u1} N (Prod.{u2, u1} M N) _inst_2 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.inr.{u2, u1} M N _inst_1 _inst_2))) (Top.top.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Submonoid.instTopSubmonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N], Eq.{max (succ u2) (succ u1)} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Sup.sup.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (SemilatticeSup.toSup.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Lattice.toSemilatticeSup.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (CompleteLattice.toLattice.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Submonoid.instCompleteLatticeSubmonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2))))) (MonoidHom.mrange.{u2, max u2 u1, max u2 u1} M (Prod.{u2, u1} M N) _inst_1 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.{u2, max u1 u2} M (Prod.{u2, u1} M N) _inst_1 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u2, max u2 u1} M (Prod.{u2, u1} M N) _inst_1 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.inl.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.mrange.{u1, max u2 u1, max u2 u1} N (Prod.{u2, u1} M N) _inst_2 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.{u1, max u1 u2} N (Prod.{u2, u1} M N) _inst_2 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.monoidHomClass.{u1, max u2 u1} N (Prod.{u2, u1} M N) _inst_2 (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (MonoidHom.inr.{u2, u1} M N _inst_1 _inst_2))) (Top.top.{max u2 u1} (Submonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)) (Submonoid.instTopSubmonoid.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulOneClassProd.{u2, u1} M N _inst_1 _inst_2)))
 Case conversion may be inaccurate. Consider using '#align submonoid.mrange_inl_sup_mrange_inr Submonoid.mrange_inl_sup_mrange_inrₓ'. -/
 @[simp, to_additive]
 theorem mrange_inl_sup_mrange_inr : (inl M N).mrange ⊔ (inr M N).mrange = ⊤ := by

Changes in mathlib4

mathlib3
mathlib4
feat(GroupTheory): add lemmas about Submonoid.closure and CoprodI (#12391)
  • Add CoprodI.lift_comp_of, CoprodI.lift_comp_of', CoprodI.lift_of', CoprodI.iSup_mrange_of, CoprodI.mclosure_iUnion_range_of, CoprodI.induction_left
  • Add MonoidHom.mrange_id, MonoidHom.mclosure_range, as well as additive versions.
Diff
@@ -979,6 +979,10 @@ theorem mrange_eq_map (f : F) : mrange f = (⊤ : Submonoid M).map f :=
 #align monoid_hom.mrange_eq_map MonoidHom.mrange_eq_map
 #align add_monoid_hom.mrange_eq_map AddMonoidHom.mrange_eq_map
 
+@[to_additive (attr := simp)]
+theorem mrange_id : mrange (MonoidHom.id M) = ⊤ := by
+  simp [mrange_eq_map]
+
 @[to_additive]
 theorem map_mrange (g : N →* P) (f : M →* N) : f.mrange.map g = mrange (comp g f) := by
   simpa only [mrange_eq_map] using (⊤ : Submonoid M).map_map g f
@@ -1019,6 +1023,10 @@ theorem map_mclosure (f : F) (s : Set M) : (closure s).map f = closure (f '' s)
 #align monoid_hom.map_mclosure MonoidHom.map_mclosure
 #align add_monoid_hom.map_mclosure AddMonoidHom.map_mclosure
 
+@[to_additive (attr := simp)]
+theorem mclosure_range (f : F) : closure (Set.range f) = mrange f := by
+  rw [← Set.image_univ, ← map_mclosure, mrange_eq_map, closure_univ]
+
 /-- Restriction of a monoid hom to a submonoid of the domain. -/
 @[to_additive "Restriction of an `AddMonoid` hom to an `AddSubmonoid` of the domain."]
 def restrict {N S : Type*} [MulOneClass N] [SetLike S M] [SubmonoidClass S M] (f : M →* N)
chore: tidy various files (#12316)
Diff
@@ -1493,8 +1493,7 @@ namespace Submonoid
 elements of `M`. -/
 @[to_additive (attr := simps!) " The additive equivalence between the type of additive units of `M`
   and the additive submonoid whose elements are the additive units of `M`. "]
-noncomputable def unitsTypeEquivIsUnitSubmonoid [Monoid M] :
-  Mˣ ≃* IsUnit.submonoid M where
+noncomputable def unitsTypeEquivIsUnitSubmonoid [Monoid M] : Mˣ ≃* IsUnit.submonoid M where
   toFun x := ⟨x, Units.isUnit x⟩
   invFun x := x.prop.unit
   left_inv x := IsUnit.unit_of_val_units _
chore: refactor to avoid importing Ring for Group topics (#11913)

This is a far from a complete success at the PR title, but it makes a fair bit of progress, and then guards this with appropriate assert_not_exists Ring statements.

It also breaks apart the Mathlib.GroupTheory.Subsemigroup.[Center|Centralizer] files, to pull the Set.center and Set.centralizer declarations into their own files not depending on Subsemigroup.

Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Yaël Dillies <yael.dillies@gmail.com>

Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johannes Hölzl, Kenny Lau, Johan Commelin, Mario Carneiro, Kevin Buzzard,
 Amelia Livingston, Yury Kudryashov
 -/
-import Mathlib.Algebra.Ring.Nat
+import Mathlib.Algebra.Group.Nat
 import Mathlib.GroupTheory.GroupAction.Defs
 import Mathlib.GroupTheory.Submonoid.Basic
 import Mathlib.GroupTheory.Subsemigroup.Operations
chore: remove more bex and ball from lemma names (#11615)

Follow-up to #10816.

Remaining places containing such lemmas are

  • Option.bex_ne_none and Option.ball_ne_none: defined in Lean core
  • Nat.decidableBallLT and Nat.decidableBallLE: defined in Lean core
  • bef_def is still used in a number of places and could be renamed
  • BAll.imp_{left,right}, BEx.imp_{left,right}, BEx.intro and BEx.elim

I only audited the first ~150 lemmas mentioning "ball"; too many lemmas named after Metric.ball/openBall/closedBall.

Co-authored-by: Yaël Dillies <yael.dillies@gmail.com>

Diff
@@ -231,9 +231,7 @@ theorem coe_map (f : F) (S : Submonoid M) : (S.map f : Set N) = f '' S :=
 #align add_submonoid.coe_map AddSubmonoid.coe_map
 
 @[to_additive (attr := simp)]
-theorem mem_map {f : F} {S : Submonoid M} {y : N} : y ∈ S.map f ↔ ∃ x ∈ S, f x = y := by
-  rw [← bex_def]
-  exact mem_image_iff_bex
+theorem mem_map {f : F} {S : Submonoid M} {y : N} : y ∈ S.map f ↔ ∃ x ∈ S, f x = y := Iff.rfl
 #align submonoid.mem_map Submonoid.mem_map
 #align add_submonoid.mem_map AddSubmonoid.mem_map
 
chore: Split Data.{Nat,Int}{.Order}.Basic in group vs ring instances (#11924)

Scatter the content of Data.Nat.Basic across:

  • Data.Nat.Defs for the lemmas having no dependencies
  • Algebra.Group.Nat for the monoid instances and the few miscellaneous lemmas needing them.
  • Algebra.Ring.Nat for the semiring instance and the few miscellaneous lemmas following it.

Similarly, scatter

  • Data.Int.Basic across Data.Int.Defs, Algebra.Group.Int, Algebra.Ring.Int
  • Data.Nat.Order.Basic across Data.Nat.Defs, Algebra.Order.Group.Nat, Algebra.Order.Ring.Nat
  • Data.Int.Order.Basic across Data.Int.Defs, Algebra.Order.Group.Int, Algebra.Order.Ring.Int

Also move a few lemmas from Data.Nat.Order.Lemmas to Data.Nat.Defs.

Before pre_11924

After post_11924

Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johannes Hölzl, Kenny Lau, Johan Commelin, Mario Carneiro, Kevin Buzzard,
 Amelia Livingston, Yury Kudryashov
 -/
-import Mathlib.Data.Nat.Basic
+import Mathlib.Algebra.Ring.Nat
 import Mathlib.GroupTheory.GroupAction.Defs
 import Mathlib.GroupTheory.Submonoid.Basic
 import Mathlib.GroupTheory.Subsemigroup.Operations
chore: avoid Ne.def (adaptation for nightly-2024-03-27) (#11801)
Diff
@@ -1305,7 +1305,7 @@ theorem nontrivial_iff_exists_ne_one (S : Submonoid M) : Nontrivial S ↔ ∃ x
   calc
     Nontrivial S ↔ ∃ x : S, x ≠ 1 := nontrivial_iff_exists_ne 1
     _ ↔ ∃ (x : _) (hx : x ∈ S), (⟨x, hx⟩ : S) ≠ ⟨1, S.one_mem⟩ := Subtype.exists
-    _ ↔ ∃ x ∈ S, x ≠ (1 : M) := by simp [Ne.def]
+    _ ↔ ∃ x ∈ S, x ≠ (1 : M) := by simp [Ne]
 #align submonoid.nontrivial_iff_exists_ne_one Submonoid.nontrivial_iff_exists_ne_one
 #align add_submonoid.nontrivial_iff_exists_ne_zero AddSubmonoid.nontrivial_iff_exists_ne_zero
 
style: homogenise porting notes (#11145)

Homogenises porting notes via capitalisation and addition of whitespace.

It makes the following changes:

  • converts "--porting note" into "-- Porting note";
  • converts "porting note" into "Porting note".
Diff
@@ -680,7 +680,7 @@ protected theorem pow_mem {M : Type*} [Monoid M] (S : Submonoid M) {x : M} (hx :
 #align submonoid.pow_mem Submonoid.pow_mem
 #align add_submonoid.nsmul_mem AddSubmonoid.nsmul_mem
 
--- porting note: coe_pow removed, syntactic tautology
+-- Porting note: coe_pow removed, syntactic tautology
 #noalign submonoid.coe_pow
 #noalign add_submonoid.coe_smul
 
feat: , and ℚ≥0 are star-ordered rings (#10633)

Also golf the existing instance for and rename Rat.num_nonneg_iff_zero_le to Rat.num_nonneg, Rat.num_pos_iff_pos to Rat.num_pos.

From LeanAPAP

Diff
@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johannes Hölzl, Kenny Lau, Johan Commelin, Mario Carneiro, Kevin Buzzard,
 Amelia Livingston, Yury Kudryashov
 -/
+import Mathlib.Data.Nat.Basic
 import Mathlib.GroupTheory.GroupAction.Defs
 import Mathlib.GroupTheory.Submonoid.Basic
 import Mathlib.GroupTheory.Subsemigroup.Operations
@@ -642,6 +643,9 @@ theorem coe_one : ((1 : S) : M) = 1 :=
 #align submonoid.coe_one Submonoid.coe_one
 #align add_submonoid.coe_zero AddSubmonoid.coe_zero
 
+@[to_additive (attr := simp)]
+lemma mk_eq_one {a : M} {ha} : (⟨a, ha⟩ : S) = 1 ↔ a = 1 := by simp [← SetLike.coe_eq_coe]
+
 @[to_additive (attr := simp)]
 theorem mk_mul_mk (x y : M) (hx : x ∈ S) (hy : y ∈ S) :
     (⟨x, hx⟩ : S) * ⟨y, hy⟩ = ⟨x * y, S.mul_mem hx hy⟩ :=
@@ -1502,3 +1506,14 @@ noncomputable def unitsTypeEquivIsUnitSubmonoid [Monoid M] :
 end Submonoid
 
 end Units
+
+open AddSubmonoid Set
+
+namespace Nat
+
+@[simp] lemma addSubmonoid_closure_one : closure ({1} : Set ℕ) = ⊤ := by
+  refine (eq_top_iff' _).2 <| Nat.rec (zero_mem _) ?_
+  simp_rw [Nat.succ_eq_add_one]
+  exact fun n hn ↦ AddSubmonoid.add_mem _ hn <| subset_closure <| Set.mem_singleton _
+
+end Nat
chore: split Ordered instances for subobjects into separate files (#10900)

Moving these to separate files should make typeclass synthesis less expensive. Additionally two of them are quite long and this shrinks them slightly.

This handles:

  • Submonoid
  • Subgroup
  • Subsemiring
  • Subring
  • Subfield
  • Submodule
  • Subalgebra

This also moves Units.posSubgroup into its own file.

The copyright headers are from:

Co-authored-by: Eric Wieser <wieser.eric@gmail.com>

Diff
@@ -4,9 +4,6 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johannes Hölzl, Kenny Lau, Johan Commelin, Mario Carneiro, Kevin Buzzard,
 Amelia Livingston, Yury Kudryashov
 -/
-import Mathlib.Algebra.Order.Monoid.Basic
-import Mathlib.Algebra.Order.Ring.Lemmas
-import Mathlib.Algebra.Order.ZeroLEOne
 import Mathlib.GroupTheory.GroupAction.Defs
 import Mathlib.GroupTheory.Submonoid.Basic
 import Mathlib.GroupTheory.Subsemigroup.Operations
@@ -602,49 +599,6 @@ instance (priority := 75) toCommMonoid {M} [CommMonoid M] {A : Type*} [SetLike A
 #align submonoid_class.to_comm_monoid SubmonoidClass.toCommMonoid
 #align add_submonoid_class.to_add_comm_monoid AddSubmonoidClass.toAddCommMonoid
 
--- Prefer subclasses of `Monoid` over subclasses of `SubmonoidClass`.
-/-- A submonoid of an `OrderedCommMonoid` is an `OrderedCommMonoid`. -/
-@[to_additive "An `AddSubmonoid` of an `OrderedAddCommMonoid` is an `OrderedAddCommMonoid`."]
-instance (priority := 75) toOrderedCommMonoid {M} [OrderedCommMonoid M] {A : Type*} [SetLike A M]
-    [SubmonoidClass A M] (S : A) : OrderedCommMonoid S :=
-  Subtype.coe_injective.orderedCommMonoid (↑) rfl (fun _ _ => rfl) fun _ _ => rfl
-#align submonoid_class.to_ordered_comm_monoid SubmonoidClass.toOrderedCommMonoid
-#align add_submonoid_class.to_ordered_add_comm_monoid AddSubmonoidClass.toOrderedAddCommMonoid
-
--- Prefer subclasses of `Monoid` over subclasses of `SubmonoidClass`.
-/-- A submonoid of a `LinearOrderedCommMonoid` is a `LinearOrderedCommMonoid`. -/
-@[to_additive
-      "An `AddSubmonoid` of a `LinearOrderedAddCommMonoid` is a `LinearOrderedAddCommMonoid`."]
-instance (priority := 75) toLinearOrderedCommMonoid {M} [LinearOrderedCommMonoid M] {A : Type*}
-    [SetLike A M] [SubmonoidClass A M] (S : A) : LinearOrderedCommMonoid S :=
-  Subtype.coe_injective.linearOrderedCommMonoid (↑) rfl (fun _ _ => rfl) (fun _ _ => rfl)
-    (fun _ _ => rfl) fun _ _ => rfl
-#align submonoid_class.to_linear_ordered_comm_monoid SubmonoidClass.toLinearOrderedCommMonoid
-#align add_submonoid_class.to_linear_ordered_add_comm_monoid AddSubmonoidClass.toLinearOrderedAddCommMonoid
-
--- Prefer subclasses of `Monoid` over subclasses of `SubmonoidClass`.
-/-- A submonoid of an `OrderedCancelCommMonoid` is an `OrderedCancelCommMonoid`. -/
-@[to_additive AddSubmonoidClass.toOrderedCancelAddCommMonoid
-      "An `AddSubmonoid` of an `OrderedCancelAddCommMonoid` is an `OrderedCancelAddCommMonoid`."]
-instance (priority := 75) toOrderedCancelCommMonoid {M} [OrderedCancelCommMonoid M] {A : Type*}
-    [SetLike A M] [SubmonoidClass A M] (S : A) : OrderedCancelCommMonoid S :=
-  Subtype.coe_injective.orderedCancelCommMonoid (↑) rfl (fun _ _ => rfl) fun _ _ => rfl
-#align submonoid_class.to_ordered_cancel_comm_monoid SubmonoidClass.toOrderedCancelCommMonoid
-#align add_submonoid_class.to_ordered_cancel_add_comm_monoid AddSubmonoidClass.toOrderedCancelAddCommMonoid
-
--- Prefer subclasses of `Monoid` over subclasses of `SubmonoidClass`.
-/-- A submonoid of a `LinearOrderedCancelCommMonoid` is a `LinearOrderedCancelCommMonoid`.
--/
-@[to_additive AddSubmonoidClass.toLinearOrderedCancelAddCommMonoid
-      "An `AddSubmonoid` of a `LinearOrderedCancelAddCommMonoid` is
-      a `LinearOrderedCancelAddCommMonoid`."]
-instance (priority := 75) toLinearOrderedCancelCommMonoid {M} [LinearOrderedCancelCommMonoid M]
-    {A : Type*} [SetLike A M] [SubmonoidClass A M] (S : A) : LinearOrderedCancelCommMonoid S :=
-  Subtype.coe_injective.linearOrderedCancelCommMonoid (↑) rfl (fun _ _ => rfl) (fun _ _ => rfl)
-    (fun _ _ => rfl) fun _ _ => rfl
-#align submonoid_class.to_linear_ordered_cancel_comm_monoid SubmonoidClass.toLinearOrderedCancelCommMonoid
-#align add_submonoid_class.to_linear_ordered_cancel_add_comm_monoid AddSubmonoidClass.toLinearOrderedCancelAddCommMonoid
-
 /-- The natural monoid hom from a submonoid of monoid `M` to `M`. -/
 @[to_additive "The natural monoid hom from an `AddSubmonoid` of `AddMonoid` `M` to `M`."]
 def subtype : S' →* M where
@@ -740,44 +694,6 @@ instance toCommMonoid {M} [CommMonoid M] (S : Submonoid M) : CommMonoid S :=
 #align submonoid.to_comm_monoid Submonoid.toCommMonoid
 #align add_submonoid.to_add_comm_monoid AddSubmonoid.toAddCommMonoid
 
-/-- A submonoid of an `OrderedCommMonoid` is an `OrderedCommMonoid`. -/
-@[to_additive "An `AddSubmonoid` of an `OrderedAddCommMonoid` is an `OrderedAddCommMonoid`."]
-instance toOrderedCommMonoid {M} [OrderedCommMonoid M] (S : Submonoid M) : OrderedCommMonoid S :=
-  Subtype.coe_injective.orderedCommMonoid (↑) rfl (fun _ _ => rfl) fun _ _ => rfl
-#align submonoid.to_ordered_comm_monoid Submonoid.toOrderedCommMonoid
-#align add_submonoid.to_ordered_add_comm_monoid AddSubmonoid.toOrderedAddCommMonoid
-
-/-- A submonoid of a `LinearOrderedCommMonoid` is a `LinearOrderedCommMonoid`. -/
-@[to_additive
-      "An `AddSubmonoid` of a `LinearOrderedAddCommMonoid` is a `LinearOrderedAddCommMonoid`."]
-instance toLinearOrderedCommMonoid {M} [LinearOrderedCommMonoid M] (S : Submonoid M) :
-    LinearOrderedCommMonoid S :=
-  Subtype.coe_injective.linearOrderedCommMonoid (↑) rfl (fun _ _ => rfl) (fun _ _ => rfl)
-    (fun _ _ => rfl) fun _ _ => rfl
-#align submonoid.to_linear_ordered_comm_monoid Submonoid.toLinearOrderedCommMonoid
-#align add_submonoid.to_linear_ordered_add_comm_monoid AddSubmonoid.toLinearOrderedAddCommMonoid
-
-/-- A submonoid of an `OrderedCancelCommMonoid` is an `OrderedCancelCommMonoid`. -/
-@[to_additive AddSubmonoid.toOrderedCancelAddCommMonoid
-      "An `AddSubmonoid` of an `OrderedCancelAddCommMonoid` is an `OrderedCancelAddCommMonoid`."]
-instance toOrderedCancelCommMonoid {M} [OrderedCancelCommMonoid M] (S : Submonoid M) :
-    OrderedCancelCommMonoid S :=
-  Subtype.coe_injective.orderedCancelCommMonoid (↑) rfl (fun _ _ => rfl) fun _ _ => rfl
-#align submonoid.to_ordered_cancel_comm_monoid Submonoid.toOrderedCancelCommMonoid
-#align add_submonoid.to_ordered_cancel_add_comm_monoid AddSubmonoid.toOrderedCancelAddCommMonoid
-
-/-- A submonoid of a `LinearOrderedCancelCommMonoid` is a `LinearOrderedCancelCommMonoid`.
--/
-@[to_additive AddSubmonoid.toLinearOrderedCancelAddCommMonoid
-      "An `AddSubmonoid` of a `LinearOrderedCancelAddCommMonoid` is
-      a `LinearOrderedCancelAddCommMonoid`."]
-instance toLinearOrderedCancelCommMonoid {M} [LinearOrderedCancelCommMonoid M] (S : Submonoid M) :
-    LinearOrderedCancelCommMonoid S :=
-  Subtype.coe_injective.linearOrderedCancelCommMonoid (↑) rfl (fun _ _ => rfl) (fun _ _ => rfl)
-    (fun _ _ => rfl) fun _ _ => rfl
-#align submonoid.to_linear_ordered_cancel_comm_monoid Submonoid.toLinearOrderedCancelCommMonoid
-#align add_submonoid.to_linear_ordered_cancel_add_comm_monoid AddSubmonoid.toLinearOrderedCancelAddCommMonoid
-
 /-- The natural monoid hom from a submonoid of monoid `M` to `M`. -/
 @[to_additive "The natural monoid hom from an `AddSubmonoid` of `AddMonoid` `M` to `M`."]
 def subtype : S →* M where
@@ -1562,40 +1478,7 @@ instance mulDistribMulAction [Monoid α] [MulDistribMulAction M' α] (S : Submon
 
 example {S : Submonoid M'} : IsScalarTower S M' M' := by infer_instance
 
-section Preorder
-variable (M)
-variable [Preorder M] [CovariantClass M M (· * ·) (· ≤ ·)] {a : M}
-
-/-- The submonoid of elements greater than `1`. -/
-@[to_additive (attr := simps) nonneg "The submonoid of nonnegative elements."]
-def oneLE : Submonoid M where
-  carrier := Set.Ici 1
-  mul_mem' := one_le_mul
-  one_mem' := le_rfl
-
-variable {M}
-
-@[to_additive (attr := simp) mem_nonneg] lemma mem_oneLE : a ∈ oneLE M ↔ 1 ≤ a := Iff.rfl
-
-end Preorder
-
-section MulZeroClass
-variable (α) [MulZeroOneClass α] [PartialOrder α] [PosMulStrictMono α] [ZeroLEOneClass α]
-  [NeZero (1 : α)] {a : α}
-
-/-- The submonoid of positive elements. -/
-@[simps] def pos : Submonoid α where
-  carrier := Set.Ioi 0
-  one_mem' := zero_lt_one
-  mul_mem' := mul_pos
-#align pos_submonoid Submonoid.pos
-
-variable {α}
-
-@[simp] lemma mem_pos : a ∈ pos α ↔ 0 < a := Iff.rfl
-#align mem_pos_monoid Submonoid.mem_pos
 
-end MulZeroClass
 end Submonoid
 
 end Actions
@@ -1618,4 +1501,4 @@ noncomputable def unitsTypeEquivIsUnitSubmonoid [Monoid M] :
 
 end Submonoid
 
-end Units
\ No newline at end of file
+end Units
feat: ℝ≥0 is a star-ordered ring (#10547)

and other basic lemmas, including a version of Cauchy-Schwarz stated using Real.sqrt

From LeanAPAP

Co-authored-by: Eric Wieser <wieser.eric@gmail.com>

Diff
@@ -1575,7 +1575,7 @@ def oneLE : Submonoid M where
 
 variable {M}
 
-@[to_additive (attr := simp)] lemma mem_oneLE : a ∈ oneLE M ↔ 1 ≤ a := Iff.rfl
+@[to_additive (attr := simp) mem_nonneg] lemma mem_oneLE : a ∈ oneLE M ↔ 1 ≤ a := Iff.rfl
 
 end Preorder
 
feat(GroupTheory/Submonoid/Units): Add Submonoid.units and related definitions and lemmas. (#9006)

The subgroup of the type of units added in this PR is something we have in other guises, which are somewhat less useful for some forms of working. The intention is to provide different options depending on how you want to think about the group of units in a submonoid.

Co-authored-by: lines <34025592+linesthatinterlace@users.noreply.github.com> Co-authored-by: Johan Commelin <johan@commelin.net>

Diff
@@ -1597,3 +1597,25 @@ variable {α}
 
 end MulZeroClass
 end Submonoid
+
+end Actions
+
+section Units
+
+namespace Submonoid
+
+/-- The multiplicative equivalence between the type of units of `M` and the submonoid of unit
+elements of `M`. -/
+@[to_additive (attr := simps!) " The additive equivalence between the type of additive units of `M`
+  and the additive submonoid whose elements are the additive units of `M`. "]
+noncomputable def unitsTypeEquivIsUnitSubmonoid [Monoid M] :
+  Mˣ ≃* IsUnit.submonoid M where
+  toFun x := ⟨x, Units.isUnit x⟩
+  invFun x := x.prop.unit
+  left_inv x := IsUnit.unit_of_val_units _
+  right_inv x := by simp_rw [IsUnit.unit_spec]
+  map_mul' x y := by simp_rw [Units.val_mul]; rfl
+
+end Submonoid
+
+end Units
\ No newline at end of file
feat: Submonoid of nonnegative elements (#10209)

Define the Submonoid of elements greater than 1, the AddSubmonoid of nonnegative elements, move posSubmonoid with them and rename it to Submonoid.pos.

From LeanAPAP and partly extracted from #4871

Diff
@@ -5,6 +5,8 @@ Authors: Johannes Hölzl, Kenny Lau, Johan Commelin, Mario Carneiro, Kevin Buzza
 Amelia Livingston, Yury Kudryashov
 -/
 import Mathlib.Algebra.Order.Monoid.Basic
+import Mathlib.Algebra.Order.Ring.Lemmas
+import Mathlib.Algebra.Order.ZeroLEOne
 import Mathlib.GroupTheory.GroupAction.Defs
 import Mathlib.GroupTheory.Submonoid.Basic
 import Mathlib.GroupTheory.Subsemigroup.Operations
@@ -1559,3 +1561,39 @@ instance mulDistribMulAction [Monoid α] [MulDistribMulAction M' α] (S : Submon
   MulDistribMulAction.compHom _ S.subtype
 
 example {S : Submonoid M'} : IsScalarTower S M' M' := by infer_instance
+
+section Preorder
+variable (M)
+variable [Preorder M] [CovariantClass M M (· * ·) (· ≤ ·)] {a : M}
+
+/-- The submonoid of elements greater than `1`. -/
+@[to_additive (attr := simps) nonneg "The submonoid of nonnegative elements."]
+def oneLE : Submonoid M where
+  carrier := Set.Ici 1
+  mul_mem' := one_le_mul
+  one_mem' := le_rfl
+
+variable {M}
+
+@[to_additive (attr := simp)] lemma mem_oneLE : a ∈ oneLE M ↔ 1 ≤ a := Iff.rfl
+
+end Preorder
+
+section MulZeroClass
+variable (α) [MulZeroOneClass α] [PartialOrder α] [PosMulStrictMono α] [ZeroLEOneClass α]
+  [NeZero (1 : α)] {a : α}
+
+/-- The submonoid of positive elements. -/
+@[simps] def pos : Submonoid α where
+  carrier := Set.Ioi 0
+  one_mem' := zero_lt_one
+  mul_mem' := mul_pos
+#align pos_submonoid Submonoid.pos
+
+variable {α}
+
+@[simp] lemma mem_pos : a ∈ pos α ↔ 0 < a := Iff.rfl
+#align mem_pos_monoid Submonoid.mem_pos
+
+end MulZeroClass
+end Submonoid
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
@@ -167,7 +167,7 @@ end
 
 namespace Submonoid
 
-variable {F : Type*} [mc : MonoidHomClass F M N]
+variable {F : Type*} [FunLike F M N] [mc : MonoidHomClass F M N]
 
 open Set
 
@@ -999,7 +999,7 @@ end Submonoid
 
 namespace MonoidHom
 
-variable {F : Type*} [mc : MonoidHomClass F M N]
+variable {F : Type*} [FunLike F M N] [mc : MonoidHomClass F M N]
 
 open Submonoid
 
chore: tidy various files (#8823)
Diff
@@ -1376,8 +1376,7 @@ theorem eq_bot_iff_forall : S = ⊥ ↔ ∀ x ∈ S, x = (1 : M) :=
 theorem eq_bot_of_subsingleton [Subsingleton S] : S = ⊥ := by
   rw [eq_bot_iff_forall]
   intro y hy
-  change ((⟨y, hy⟩ : S) : M) = (1 : S)
-  rw [Subsingleton.elim (⟨y, hy⟩ : S) 1]
+  simpa using _root_.congr_arg ((↑) : S → M) <| Subsingleton.elim (⟨y, hy⟩ : S) 1
 
 @[to_additive]
 theorem nontrivial_iff_exists_ne_one (S : Submonoid M) : Nontrivial S ↔ ∃ x ∈ S, x ≠ (1 : M) :=
chore: bump to v4.3.0-rc2 (#8366)

PR contents

This is the supremum of

along with some minor fixes from failures on nightly-testing as Mathlib master is merged into it.

Note that some PRs for changes that are already compatible with the current toolchain and will be necessary have already been split out: #8380.

I am hopeful that in future we will be able to progressively merge adaptation PRs into a bump/v4.X.0 branch, so we never end up with a "big merge" like this. However one of these adaptation PRs (#8056) predates my new scheme for combined CI, and it wasn't possible to keep that PR viable in the meantime.

Lean PRs involved in this bump

In particular this includes adjustments for the Lean PRs

leanprover/lean4#2778

We can get rid of all the

local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue [lean4#2220](https://github.com/leanprover/lean4/pull/2220)

macros across Mathlib (and in any projects that want to write natural number powers of reals).

leanprover/lean4#2722

Changes the default behaviour of simp to (config := {decide := false}). This makes simp (and consequentially norm_num) less powerful, but also more consistent, and less likely to blow up in long failures. This requires a variety of changes: changing some previously by simp or norm_num to decide or rfl, or adding (config := {decide := true}).

leanprover/lean4#2783

This changed the behaviour of simp so that simp [f] will only unfold "fully applied" occurrences of f. The old behaviour can be recovered with simp (config := { unfoldPartialApp := true }). We may in future add a syntax for this, e.g. simp [!f]; please provide feedback! In the meantime, we have made the following changes:

  • switching to using explicit lemmas that have the intended level of application
  • (config := { unfoldPartialApp := true }) in some places, to recover the old behaviour
  • Using @[eqns] to manually adjust the equation lemmas for a particular definition, recovering the old behaviour just for that definition. See #8371, where we do this for Function.comp and Function.flip.

This change in Lean may require further changes down the line (e.g. adding the !f syntax, and/or upstreaming the special treatment for Function.comp and Function.flip, and/or removing this special treatment). Please keep an open and skeptical mind about these changes!

Co-authored-by: leanprover-community-mathlib4-bot <leanprover-community-mathlib4-bot@users.noreply.github.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Mauricio Collares <mauricio@collares.org>

Diff
@@ -560,7 +560,7 @@ attribute [to_additive existing nSMul] nPow
 
 @[to_additive (attr := simp, norm_cast)]
 theorem coe_pow {M} [Monoid M] {A : Type*} [SetLike A M] [SubmonoidClass A M] {S : A} (x : S)
-    (n : ℕ) : (x ^ n : M) = (x : M) ^ n :=
+    (n : ℕ) : ↑(x ^ n) = (x : M) ^ n :=
   rfl
 #align submonoid_class.coe_pow SubmonoidClass.coe_pow
 #align add_submonoid_class.coe_nsmul AddSubmonoidClass.coe_nsmul
feat: Simple Subgroup lemmas (#8341)
Diff
@@ -1525,15 +1525,20 @@ instance isScalarTower [SMul α β] [SMul M' α] [SMul M' β] [IsScalarTower M'
     IsScalarTower S α β :=
   ⟨fun a => (smul_assoc (a : M') : _)⟩
 
-@[to_additive]
-theorem smul_def [SMul M' α] {S : Submonoid M'} (g : S) (m : α) : g • m = (g : M') • m :=
-  rfl
+section SMul
+variable [SMul M' α] {S : Submonoid M'}
+
+@[to_additive] lemma smul_def (g : S) (a : α) : g • a = (g : M') • a := rfl
 #align submonoid.smul_def Submonoid.smul_def
 #align add_submonoid.vadd_def AddSubmonoid.vadd_def
 
-instance faithfulSMul [SMul M' α] [FaithfulSMul M' α] (S : Submonoid M') : FaithfulSMul S α :=
+@[to_additive (attr := simp)]
+lemma mk_smul (g : M') (hg : g ∈ S) (a : α) : (⟨g, hg⟩ : S) • a = g • a := rfl
+
+instance faithfulSMul [FaithfulSMul M' α] : FaithfulSMul S α :=
   ⟨fun h => Subtype.ext <| eq_of_smul_eq_smul h⟩
 
+end SMul
 end MulOneClass
 
 variable [Monoid M']
chore: Merge back ordered cancellative stuff (#8170)

There really is no reason (mathematically nor import graphically) to have OrderedCancelCommMonoid be defined in a separate file from OrderedCommMonoid.

Also take the opportunity to:

  • make OrderedCancelCommMonoid extend OrderedCommMonoid
  • fix capitalisation in instance names
  • standardise to defining the additive of each structure version first, so that to_additive can be called directly on the multiplicative version
  • inline at no cost a few auxiliary lemmas
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johannes Hölzl, Kenny Lau, Johan Commelin, Mario Carneiro, Kevin Buzzard,
 Amelia Livingston, Yury Kudryashov
 -/
-import Mathlib.Algebra.Order.Monoid.Cancel.Basic
+import Mathlib.Algebra.Order.Monoid.Basic
 import Mathlib.GroupTheory.GroupAction.Defs
 import Mathlib.GroupTheory.Submonoid.Basic
 import Mathlib.GroupTheory.Subsemigroup.Operations
feat: small missing group lemmas (#7614)

Co-authored-by: Eric Wieser <wieser.eric@gmail.com>

Diff
@@ -1372,6 +1372,13 @@ theorem eq_bot_iff_forall : S = ⊥ ↔ ∀ x ∈ S, x = (1 : M) :=
 #align submonoid.eq_bot_iff_forall Submonoid.eq_bot_iff_forall
 #align add_submonoid.eq_bot_iff_forall AddSubmonoid.eq_bot_iff_forall
 
+@[to_additive]
+theorem eq_bot_of_subsingleton [Subsingleton S] : S = ⊥ := by
+  rw [eq_bot_iff_forall]
+  intro y hy
+  change ((⟨y, hy⟩ : S) : M) = (1 : S)
+  rw [Subsingleton.elim (⟨y, hy⟩ : S) 1]
+
 @[to_additive]
 theorem nontrivial_iff_exists_ne_one (S : Submonoid M) : Nontrivial S ↔ ∃ x ∈ S, x ≠ (1 : M) :=
   calc
chore: replace anonymous morphism constructors with named fields (#7015)

This makes it easier to refactor the order or inheritance structure of morphisms without having to change all of the anonymous constructors.

This is far from exhaustive.

Diff
@@ -645,8 +645,8 @@ instance (priority := 75) toLinearOrderedCancelCommMonoid {M} [LinearOrderedCanc
 
 /-- The natural monoid hom from a submonoid of monoid `M` to `M`. -/
 @[to_additive "The natural monoid hom from an `AddSubmonoid` of `AddMonoid` `M` to `M`."]
-def subtype : S' →* M :=
-  ⟨(⟨Subtype.val, rfl⟩ : OneHom S' M), by simp⟩
+def subtype : S' →* M where
+  toFun := Subtype.val; map_one' := rfl; map_mul' _ _ := by simp
 #align submonoid_class.subtype SubmonoidClass.subtype
 #align add_submonoid_class.subtype AddSubmonoidClass.subtype
 
@@ -778,8 +778,8 @@ instance toLinearOrderedCancelCommMonoid {M} [LinearOrderedCancelCommMonoid M] (
 
 /-- The natural monoid hom from a submonoid of monoid `M` to `M`. -/
 @[to_additive "The natural monoid hom from an `AddSubmonoid` of `AddMonoid` `M` to `M`."]
-def subtype : S →* M :=
-  ⟨(⟨Subtype.val, rfl⟩ : OneHom S M), by simp⟩
+def subtype : S →* M where
+  toFun := Subtype.val; map_one' := rfl; map_mul' _ _ := by simp
 #align submonoid.subtype Submonoid.subtype
 #align add_submonoid.subtype AddSubmonoid.subtype
 
chore: cleanup a few porting notes and friends relating to alias (#6790)
  • After the new alias command we can now do protected alias
  • alias at some point broke dot notation by unfolding (see #1022) this was fixed in #1058 but the library was not fixed up there
Diff
@@ -953,7 +953,7 @@ theorem comap_equiv_eq_map_symm (f : N ≃* M) (K : Submonoid M) :
 
 @[to_additive (attr := simp)]
 theorem map_equiv_top (f : M ≃* N) : (⊤ : Submonoid M).map f.toMonoidHom = ⊤ :=
-  SetLike.coe_injective <| Set.image_univ.trans (Function.Surjective.range_eq f.surjective)
+  SetLike.coe_injective <| Set.image_univ.trans f.surjective.range_eq
 #align submonoid.map_equiv_top Submonoid.map_equiv_top
 #align add_submonoid.map_equiv_top AddSubmonoid.map_equiv_top
 
feat(GroupTheory/Subgroup/Basic): ker_{fst,snd} (#6639)

Co-authored-by: Yakov Pechersky <pechersky@users.noreply.github.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>

Diff
@@ -1244,6 +1244,12 @@ theorem mker_inr : mker (inr M N) = ⊥ := by
 #align monoid_hom.mker_inr MonoidHom.mker_inr
 #align add_monoid_hom.mker_inr AddMonoidHom.mker_inr
 
+@[to_additive (attr := simp)]
+lemma mker_fst : mker (fst M N) = .prod ⊥ ⊤ := SetLike.ext fun _ => (and_true_iff _).symm
+
+@[to_additive (attr := simp)]
+lemma mker_snd : mker (snd M N) = .prod ⊤ ⊥ := SetLike.ext fun _ => (true_and_iff _).symm
+
 /-- The `MonoidHom` from the preimage of a submonoid to itself. -/
 @[to_additive (attr := simps)
       "the `AddMonoidHom` from the preimage of an additive submonoid to itself."]
chore: adjust priorities of mem_map lemmas (#6327)

The mem_map lemmas were inconsistently either not simp lemmas at all, simp lemmas, or simp lemmas with a lowered priority.

This PR makes them uniformly low priority simp lemmas, and adds a few simp attributes to "better" simp lemmas instead. (However these lemmas are themselves quite inconsistent across different algebraic structures, and I haven't attempted to add missing ones.)

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

Diff
@@ -255,7 +255,10 @@ theorem map_map (g : N →* P) (f : M →* N) : (S.map f).map g = S.map (g.comp
 #align submonoid.map_map Submonoid.map_map
 #align add_submonoid.map_map AddSubmonoid.map_map
 
-@[to_additive]
+-- The simpNF linter says that the LHS can be simplified via `Submonoid.mem_map`.
+-- However this is a higher priority lemma.
+-- https://github.com/leanprover/std4/issues/207
+@[to_additive (attr := simp 1100, nolint simpNF)]
 theorem mem_map_iff_mem {f : F} (hf : Function.Injective f) {S : Submonoid M} {x : M} :
     f x ∈ S.map f ↔ x ∈ S :=
   hf.mem_set_image
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
@@ -65,7 +65,7 @@ submonoid, range, product, map, comap
 -/
 
 
-variable {M N P : Type _} [MulOneClass M] [MulOneClass N] [MulOneClass P] (S : Submonoid M)
+variable {M N P : Type*} [MulOneClass M] [MulOneClass N] [MulOneClass P] (S : Submonoid M)
 
 /-!
 ### Conversion to/from `Additive`/`Multiplicative`
@@ -119,7 +119,7 @@ end
 
 section
 
-variable {A : Type _} [AddZeroClass A]
+variable {A : Type*} [AddZeroClass A]
 
 /-- Additive submonoids of an additive monoid `A` are isomorphic to
 multiplicative submonoids of `Multiplicative A`. -/
@@ -167,7 +167,7 @@ end
 
 namespace Submonoid
 
-variable {F : Type _} [mc : MonoidHomClass F M N]
+variable {F : Type*} [mc : MonoidHomClass F M N]
 
 open Set
 
@@ -329,7 +329,7 @@ theorem map_sup (S T : Submonoid M) (f : F) : (S ⊔ T).map f = S.map f ⊔ T.ma
 #align add_submonoid.map_sup AddSubmonoid.map_sup
 
 @[to_additive]
-theorem map_iSup {ι : Sort _} (f : F) (s : ι → Submonoid M) : (iSup s).map f = ⨆ i, (s i).map f :=
+theorem map_iSup {ι : Sort*} (f : F) (s : ι → Submonoid M) : (iSup s).map f = ⨆ i, (s i).map f :=
   (gc_map_comap f : GaloisConnection (map f) (comap f)).l_iSup
 #align submonoid.map_supr Submonoid.map_iSup
 #align add_submonoid.map_supr AddSubmonoid.map_iSup
@@ -341,7 +341,7 @@ theorem comap_inf (S T : Submonoid N) (f : F) : (S ⊓ T).comap f = S.comap f 
 #align add_submonoid.comap_inf AddSubmonoid.comap_inf
 
 @[to_additive]
-theorem comap_iInf {ι : Sort _} (f : F) (s : ι → Submonoid N) :
+theorem comap_iInf {ι : Sort*} (f : F) (s : ι → Submonoid N) :
     (iInf s).comap f = ⨅ i, (s i).comap f :=
   (gc_map_comap f : GaloisConnection (map f) (comap f)).u_iInf
 #align submonoid.comap_infi Submonoid.comap_iInf
@@ -367,7 +367,7 @@ theorem map_id (S : Submonoid M) : S.map (MonoidHom.id M) = S :=
 
 section GaloisCoinsertion
 
-variable {ι : Type _} {f : F} (hf : Function.Injective f)
+variable {ι : Type*} {f : F} (hf : Function.Injective f)
 
 /-- `map f` and `comap f` form a `GaloisCoinsertion` when `f` is injective. -/
 @[to_additive " `map f` and `comap f` form a `GaloisCoinsertion` when `f` is injective. "]
@@ -434,7 +434,7 @@ end GaloisCoinsertion
 
 section GaloisInsertion
 
-variable {ι : Type _} {f : F} (hf : Function.Surjective f)
+variable {ι : Type*} {f : F} (hf : Function.Surjective f)
 
 /-- `map f` and `comap f` form a `GaloisInsertion` when `f` is surjective. -/
 @[to_additive " `map f` and `comap f` form a `GaloisInsertion` when `f` is surjective. "]
@@ -505,7 +505,7 @@ end Submonoid
 
 namespace OneMemClass
 
-variable {A M₁ : Type _} [SetLike A M₁] [One M₁] [hA : OneMemClass A M₁] (S' : A)
+variable {A M₁ : Type*} [SetLike A M₁] [One M₁] [hA : OneMemClass A M₁] (S' : A)
 
 /-- A submonoid of a monoid inherits a 1. -/
 @[to_additive "An `AddSubmonoid` of an `AddMonoid` inherits a zero."]
@@ -538,10 +538,10 @@ theorem one_def : (1 : S') = ⟨1, OneMemClass.one_mem S'⟩ :=
 
 end OneMemClass
 
-variable {A : Type _} [SetLike A M] [hA : SubmonoidClass A M] (S' : A)
+variable {A : Type*} [SetLike A M] [hA : SubmonoidClass A M] (S' : A)
 
 /-- An `AddSubmonoid` of an `AddMonoid` inherits a scalar multiplication. -/
-instance AddSubmonoidClass.nSMul {M} [AddMonoid M] {A : Type _} [SetLike A M]
+instance AddSubmonoidClass.nSMul {M} [AddMonoid M] {A : Type*} [SetLike A M]
     [AddSubmonoidClass A M] (S : A) : SMul ℕ S :=
   ⟨fun n a => ⟨n • a.1, nsmul_mem a.2 n⟩⟩
 #align add_submonoid_class.has_nsmul AddSubmonoidClass.nSMul
@@ -549,21 +549,21 @@ instance AddSubmonoidClass.nSMul {M} [AddMonoid M] {A : Type _} [SetLike A M]
 namespace SubmonoidClass
 
 /-- A submonoid of a monoid inherits a power operator. -/
-instance nPow {M} [Monoid M] {A : Type _} [SetLike A M] [SubmonoidClass A M] (S : A) : Pow S ℕ :=
+instance nPow {M} [Monoid M] {A : Type*} [SetLike A M] [SubmonoidClass A M] (S : A) : Pow S ℕ :=
   ⟨fun a n => ⟨a.1 ^ n, pow_mem a.2 n⟩⟩
 #align submonoid_class.has_pow SubmonoidClass.nPow
 
 attribute [to_additive existing nSMul] nPow
 
 @[to_additive (attr := simp, norm_cast)]
-theorem coe_pow {M} [Monoid M] {A : Type _} [SetLike A M] [SubmonoidClass A M] {S : A} (x : S)
+theorem coe_pow {M} [Monoid M] {A : Type*} [SetLike A M] [SubmonoidClass A M] {S : A} (x : S)
     (n : ℕ) : (x ^ n : M) = (x : M) ^ n :=
   rfl
 #align submonoid_class.coe_pow SubmonoidClass.coe_pow
 #align add_submonoid_class.coe_nsmul AddSubmonoidClass.coe_nsmul
 
 @[to_additive (attr := simp)]
-theorem mk_pow {M} [Monoid M] {A : Type _} [SetLike A M] [SubmonoidClass A M] {S : A} (x : M)
+theorem mk_pow {M} [Monoid M] {A : Type*} [SetLike A M] [SubmonoidClass A M] {S : A} (x : M)
     (hx : x ∈ S) (n : ℕ) : (⟨x, hx⟩ : S) ^ n = ⟨x ^ n, pow_mem hx n⟩ :=
   rfl
 #align submonoid_class.mk_pow SubmonoidClass.mk_pow
@@ -573,7 +573,7 @@ theorem mk_pow {M} [Monoid M] {A : Type _} [SetLike A M] [SubmonoidClass A M] {S
 /-- A submonoid of a unital magma inherits a unital magma structure. -/
 @[to_additive
       "An `AddSubmonoid` of a unital additive magma inherits a unital additive magma structure."]
-instance (priority := 75) toMulOneClass {M : Type _} [MulOneClass M] {A : Type _} [SetLike A M]
+instance (priority := 75) toMulOneClass {M : Type*} [MulOneClass M] {A : Type*} [SetLike A M]
     [SubmonoidClass A M] (S : A) : MulOneClass S :=
     Subtype.coe_injective.mulOneClass (↑) rfl (fun _ _ => rfl)
 #align submonoid_class.to_mul_one_class SubmonoidClass.toMulOneClass
@@ -582,7 +582,7 @@ instance (priority := 75) toMulOneClass {M : Type _} [MulOneClass M] {A : Type _
 -- Prefer subclasses of `Monoid` over subclasses of `SubmonoidClass`.
 /-- A submonoid of a monoid inherits a monoid structure. -/
 @[to_additive "An `AddSubmonoid` of an `AddMonoid` inherits an `AddMonoid` structure."]
-instance (priority := 75) toMonoid {M : Type _} [Monoid M] {A : Type _} [SetLike A M]
+instance (priority := 75) toMonoid {M : Type*} [Monoid M] {A : Type*} [SetLike A M]
     [SubmonoidClass A M] (S : A) : Monoid S :=
   Subtype.coe_injective.monoid (↑) rfl (fun _ _ => rfl) (fun _ _ => rfl)
 #align submonoid_class.to_monoid SubmonoidClass.toMonoid
@@ -591,7 +591,7 @@ instance (priority := 75) toMonoid {M : Type _} [Monoid M] {A : Type _} [SetLike
 -- Prefer subclasses of `Monoid` over subclasses of `SubmonoidClass`.
 /-- A submonoid of a `CommMonoid` is a `CommMonoid`. -/
 @[to_additive "An `AddSubmonoid` of an `AddCommMonoid` is an `AddCommMonoid`."]
-instance (priority := 75) toCommMonoid {M} [CommMonoid M] {A : Type _} [SetLike A M]
+instance (priority := 75) toCommMonoid {M} [CommMonoid M] {A : Type*} [SetLike A M]
     [SubmonoidClass A M] (S : A) : CommMonoid S :=
   Subtype.coe_injective.commMonoid (↑) rfl (fun _ _ => rfl) fun _ _ => rfl
 #align submonoid_class.to_comm_monoid SubmonoidClass.toCommMonoid
@@ -600,7 +600,7 @@ instance (priority := 75) toCommMonoid {M} [CommMonoid M] {A : Type _} [SetLike
 -- Prefer subclasses of `Monoid` over subclasses of `SubmonoidClass`.
 /-- A submonoid of an `OrderedCommMonoid` is an `OrderedCommMonoid`. -/
 @[to_additive "An `AddSubmonoid` of an `OrderedAddCommMonoid` is an `OrderedAddCommMonoid`."]
-instance (priority := 75) toOrderedCommMonoid {M} [OrderedCommMonoid M] {A : Type _} [SetLike A M]
+instance (priority := 75) toOrderedCommMonoid {M} [OrderedCommMonoid M] {A : Type*} [SetLike A M]
     [SubmonoidClass A M] (S : A) : OrderedCommMonoid S :=
   Subtype.coe_injective.orderedCommMonoid (↑) rfl (fun _ _ => rfl) fun _ _ => rfl
 #align submonoid_class.to_ordered_comm_monoid SubmonoidClass.toOrderedCommMonoid
@@ -610,7 +610,7 @@ instance (priority := 75) toOrderedCommMonoid {M} [OrderedCommMonoid M] {A : Typ
 /-- A submonoid of a `LinearOrderedCommMonoid` is a `LinearOrderedCommMonoid`. -/
 @[to_additive
       "An `AddSubmonoid` of a `LinearOrderedAddCommMonoid` is a `LinearOrderedAddCommMonoid`."]
-instance (priority := 75) toLinearOrderedCommMonoid {M} [LinearOrderedCommMonoid M] {A : Type _}
+instance (priority := 75) toLinearOrderedCommMonoid {M} [LinearOrderedCommMonoid M] {A : Type*}
     [SetLike A M] [SubmonoidClass A M] (S : A) : LinearOrderedCommMonoid S :=
   Subtype.coe_injective.linearOrderedCommMonoid (↑) rfl (fun _ _ => rfl) (fun _ _ => rfl)
     (fun _ _ => rfl) fun _ _ => rfl
@@ -621,7 +621,7 @@ instance (priority := 75) toLinearOrderedCommMonoid {M} [LinearOrderedCommMonoid
 /-- A submonoid of an `OrderedCancelCommMonoid` is an `OrderedCancelCommMonoid`. -/
 @[to_additive AddSubmonoidClass.toOrderedCancelAddCommMonoid
       "An `AddSubmonoid` of an `OrderedCancelAddCommMonoid` is an `OrderedCancelAddCommMonoid`."]
-instance (priority := 75) toOrderedCancelCommMonoid {M} [OrderedCancelCommMonoid M] {A : Type _}
+instance (priority := 75) toOrderedCancelCommMonoid {M} [OrderedCancelCommMonoid M] {A : Type*}
     [SetLike A M] [SubmonoidClass A M] (S : A) : OrderedCancelCommMonoid S :=
   Subtype.coe_injective.orderedCancelCommMonoid (↑) rfl (fun _ _ => rfl) fun _ _ => rfl
 #align submonoid_class.to_ordered_cancel_comm_monoid SubmonoidClass.toOrderedCancelCommMonoid
@@ -634,7 +634,7 @@ instance (priority := 75) toOrderedCancelCommMonoid {M} [OrderedCancelCommMonoid
       "An `AddSubmonoid` of a `LinearOrderedCancelAddCommMonoid` is
       a `LinearOrderedCancelAddCommMonoid`."]
 instance (priority := 75) toLinearOrderedCancelCommMonoid {M} [LinearOrderedCancelCommMonoid M]
-    {A : Type _} [SetLike A M] [SubmonoidClass A M] (S : A) : LinearOrderedCancelCommMonoid S :=
+    {A : Type*} [SetLike A M] [SubmonoidClass A M] (S : A) : LinearOrderedCancelCommMonoid S :=
   Subtype.coe_injective.linearOrderedCancelCommMonoid (↑) rfl (fun _ _ => rfl) (fun _ _ => rfl)
     (fun _ _ => rfl) fun _ _ => rfl
 #align submonoid_class.to_linear_ordered_cancel_comm_monoid SubmonoidClass.toLinearOrderedCancelCommMonoid
@@ -705,13 +705,13 @@ theorem one_def : (1 : S) = ⟨1, S.one_mem⟩ :=
 /-- A submonoid of a unital magma inherits a unital magma structure. -/
 @[to_additive
       "An `AddSubmonoid` of a unital additive magma inherits a unital additive magma structure."]
-instance toMulOneClass {M : Type _} [MulOneClass M] (S : Submonoid M) : MulOneClass S :=
+instance toMulOneClass {M : Type*} [MulOneClass M] (S : Submonoid M) : MulOneClass S :=
   Subtype.coe_injective.mulOneClass (↑) rfl fun _ _ => rfl
 #align submonoid.to_mul_one_class Submonoid.toMulOneClass
 #align add_submonoid.to_add_zero_class AddSubmonoid.toAddZeroClass
 
 @[to_additive]
-protected theorem pow_mem {M : Type _} [Monoid M] (S : Submonoid M) {x : M} (hx : x ∈ S) (n : ℕ) :
+protected theorem pow_mem {M : Type*} [Monoid M] (S : Submonoid M) {x : M} (hx : x ∈ S) (n : ℕ) :
     x ^ n ∈ S :=
   pow_mem hx n
 #align submonoid.pow_mem Submonoid.pow_mem
@@ -723,7 +723,7 @@ protected theorem pow_mem {M : Type _} [Monoid M] (S : Submonoid M) {x : M} (hx
 
 /-- A submonoid of a monoid inherits a monoid structure. -/
 @[to_additive "An `AddSubmonoid` of an `AddMonoid` inherits an `AddMonoid` structure."]
-instance toMonoid {M : Type _} [Monoid M] (S : Submonoid M) : Monoid S :=
+instance toMonoid {M : Type*} [Monoid M] (S : Submonoid M) : Monoid S :=
   Subtype.coe_injective.monoid (↑) rfl (fun _ _ => rfl) fun _ _ => rfl
 #align submonoid.to_monoid Submonoid.toMonoid
 #align add_submonoid.to_add_monoid AddSubmonoid.toAddMonoid
@@ -996,7 +996,7 @@ end Submonoid
 
 namespace MonoidHom
 
-variable {F : Type _} [mc : MonoidHomClass F M N]
+variable {F : Type*} [mc : MonoidHomClass F M N]
 
 open Submonoid
 
@@ -1098,14 +1098,14 @@ theorem map_mclosure (f : F) (s : Set M) : (closure s).map f = closure (f '' s)
 
 /-- Restriction of a monoid hom to a submonoid of the domain. -/
 @[to_additive "Restriction of an `AddMonoid` hom to an `AddSubmonoid` of the domain."]
-def restrict {N S : Type _} [MulOneClass N] [SetLike S M] [SubmonoidClass S M] (f : M →* N)
+def restrict {N S : Type*} [MulOneClass N] [SetLike S M] [SubmonoidClass S M] (f : M →* N)
     (s : S) : s →* N :=
   f.comp (SubmonoidClass.subtype _)
 #align monoid_hom.restrict MonoidHom.restrict
 #align add_monoid_hom.restrict AddMonoidHom.restrict
 
 @[to_additive (attr := simp)]
-theorem restrict_apply {N S : Type _} [MulOneClass N] [SetLike S M] [SubmonoidClass S M]
+theorem restrict_apply {N S : Type*} [MulOneClass N] [SetLike S M] [SubmonoidClass S M]
     (f : M →* N) (s : S) (x : s) : f.restrict s x = f x :=
   rfl
 #align monoid_hom.restrict_apply MonoidHom.restrict_apply
@@ -1211,7 +1211,7 @@ theorem mker_one : mker (1 : M →* N) = ⊤ := by
 #align add_monoid_hom.mker_zero AddMonoidHom.mker_zero
 
 @[to_additive prod_map_comap_prod']
-theorem prod_map_comap_prod' {M' : Type _} {N' : Type _} [MulOneClass M'] [MulOneClass N']
+theorem prod_map_comap_prod' {M' : Type*} {N' : Type*} [MulOneClass M'] [MulOneClass N']
     (f : M →* N) (g : M' →* N') (S : Submonoid N) (S' : Submonoid N') :
     (S.prod S').comap (prodMap f g) = (S.comap f).prod (S'.comap g) :=
   SetLike.coe_injective <| Set.preimage_prod_map_prod f g _ _
@@ -1220,7 +1220,7 @@ theorem prod_map_comap_prod' {M' : Type _} {N' : Type _} [MulOneClass M'] [MulOn
 #align add_monoid_hom.sum_map_comap_sum' AddMonoidHom.prod_map_comap_prod'
 
 @[to_additive mker_prod_map]
-theorem mker_prod_map {M' : Type _} {N' : Type _} [MulOneClass M'] [MulOneClass N'] (f : M →* N)
+theorem mker_prod_map {M' : Type*} {N' : Type*} [MulOneClass M'] [MulOneClass N'] (f : M →* N)
     (g : M' →* N') : mker (prodMap f g) = f.mker.prod (mker g) := by
   rw [← comap_bot', ← comap_bot', ← comap_bot', ← prod_map_comap_prod', bot_prod_bot]
 #align monoid_hom.mker_prod_map MonoidHom.mker_prod_map
@@ -1479,7 +1479,7 @@ These instances work particularly well in conjunction with `Monoid.toMulAction`,
 
 namespace Submonoid
 
-variable {M' : Type _} {α β : Type _}
+variable {M' : Type*} {α β : Type*}
 
 section MulOneClass
 
chore: fix names (Add)SubmonoidClass.Subtype (#6374)
Diff
@@ -642,13 +642,13 @@ instance (priority := 75) toLinearOrderedCancelCommMonoid {M} [LinearOrderedCanc
 
 /-- The natural monoid hom from a submonoid of monoid `M` to `M`. -/
 @[to_additive "The natural monoid hom from an `AddSubmonoid` of `AddMonoid` `M` to `M`."]
-def Subtype : S' →* M :=
+def subtype : S' →* M :=
   ⟨(⟨Subtype.val, rfl⟩ : OneHom S' M), by simp⟩
-#align submonoid_class.subtype SubmonoidClass.Subtype
-#align add_submonoid_class.subtype AddSubmonoidClass.Subtype
+#align submonoid_class.subtype SubmonoidClass.subtype
+#align add_submonoid_class.subtype AddSubmonoidClass.subtype
 
 @[to_additive (attr := simp)]
-theorem coe_subtype : (SubmonoidClass.Subtype S' : S' → M) = Subtype.val :=
+theorem coe_subtype : (SubmonoidClass.subtype S' : S' → M) = Subtype.val :=
   rfl
 #align submonoid_class.coe_subtype SubmonoidClass.coe_subtype
 #align add_submonoid_class.coe_subtype AddSubmonoidClass.coe_subtype
@@ -1100,7 +1100,7 @@ theorem map_mclosure (f : F) (s : Set M) : (closure s).map f = closure (f '' s)
 @[to_additive "Restriction of an `AddMonoid` hom to an `AddSubmonoid` of the domain."]
 def restrict {N S : Type _} [MulOneClass N] [SetLike S M] [SubmonoidClass S M] (f : M →* N)
     (s : S) : s →* N :=
-  f.comp (SubmonoidClass.Subtype _)
+  f.comp (SubmonoidClass.subtype _)
 #align monoid_hom.restrict MonoidHom.restrict
 #align add_monoid_hom.restrict AddMonoidHom.restrict
 
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

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

Diff
@@ -3,17 +3,14 @@ Copyright (c) 2018 Johannes Hölzl. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johannes Hölzl, Kenny Lau, Johan Commelin, Mario Carneiro, Kevin Buzzard,
 Amelia Livingston, Yury Kudryashov
-
-! This file was ported from Lean 3 source module group_theory.submonoid.operations
-! leanprover-community/mathlib commit cf8e77c636317b059a8ce20807a29cf3772a0640
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.Algebra.Order.Monoid.Cancel.Basic
 import Mathlib.GroupTheory.GroupAction.Defs
 import Mathlib.GroupTheory.Submonoid.Basic
 import Mathlib.GroupTheory.Subsemigroup.Operations
 
+#align_import group_theory.submonoid.operations from "leanprover-community/mathlib"@"cf8e77c636317b059a8ce20807a29cf3772a0640"
+
 /-!
 # Operations on `Submonoid`s
 
chore: add @[simp] uniformly to _top_of_surjective lemmas (#5064)

Some such lemmas are already labelled @[simp], and this PR adds @[simp] to the remaining ones.

It's useful for some automation I'm writing to have these all in simp.

Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au>

Diff
@@ -1072,7 +1072,8 @@ theorem mrange_top_iff_surjective {f : F} : mrange f = (⊤ : Submonoid N) ↔ F
 #align add_monoid_hom.mrange_top_iff_surjective AddMonoidHom.mrange_top_iff_surjective
 
 /-- The range of a surjective monoid hom is the whole of the codomain. -/
-@[to_additive "The range of a surjective `AddMonoid` hom is the whole of the codomain."]
+@[to_additive (attr := simp)
+  "The range of a surjective `AddMonoid` hom is the whole of the codomain."]
 theorem mrange_top_of_surjective (f : F) (hf : Function.Surjective f) :
     mrange f = (⊤ : Submonoid N) :=
   mrange_top_iff_surjective.2 hf
chore: fix grammar 2/3 (#5002)

Part 2 of #5001

Diff
@@ -575,7 +575,7 @@ theorem mk_pow {M} [Monoid M] {A : Type _} [SetLike A M] [SubmonoidClass A M] {S
 -- Prefer subclasses of `Monoid` over subclasses of `SubmonoidClass`.
 /-- A submonoid of a unital magma inherits a unital magma structure. -/
 @[to_additive
-      "An `AddSubmonoid` of an unital additive magma inherits an unital additive magma structure."]
+      "An `AddSubmonoid` of a unital additive magma inherits a unital additive magma structure."]
 instance (priority := 75) toMulOneClass {M : Type _} [MulOneClass M] {A : Type _} [SetLike A M]
     [SubmonoidClass A M] (S : A) : MulOneClass S :=
     Subtype.coe_injective.mulOneClass (↑) rfl (fun _ _ => rfl)
@@ -707,7 +707,7 @@ theorem one_def : (1 : S) = ⟨1, S.one_mem⟩ :=
 
 /-- A submonoid of a unital magma inherits a unital magma structure. -/
 @[to_additive
-      "An `AddSubmonoid` of an unital additive magma inherits an unital additive magma structure."]
+      "An `AddSubmonoid` of a unital additive magma inherits a unital additive magma structure."]
 instance toMulOneClass {M : Type _} [MulOneClass M] (S : Submonoid M) : MulOneClass S :=
   Subtype.coe_injective.mulOneClass (↑) rfl fun _ _ => rfl
 #align submonoid.to_mul_one_class Submonoid.toMulOneClass
chore: formatting issues (#4947)

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

Diff
@@ -1023,14 +1023,14 @@ A good example is the case of a morphism of monoids. A convenient definition for
 definitional convenience, we first define `Submonoid.copy` as follows:
 ```lean
 protected def copy (S : Submonoid M) (s : Set M) (hs : s = S) : Submonoid M :=
-{ carrier  := s,
-  one_mem' := hs.symm ▸ S.one_mem',
-  mul_mem' := hs.symm ▸ S.mul_mem' }
+  { carrier  := s,
+    one_mem' := hs.symm ▸ S.one_mem',
+    mul_mem' := hs.symm ▸ S.mul_mem' }
 ```
 and then finally define:
 ```lean
 def mrange (f : M →* N) : Submonoid N :=
-((⊤ : Submonoid M).map f).copy (Set.range f) Set.image_univ.symm
+  ((⊤ : Submonoid M).map f).copy (Set.range f) Set.image_univ.symm
 ```
 -/
 
@@ -1369,7 +1369,7 @@ theorem eq_bot_iff_forall : S = ⊥ ↔ ∀ x ∈ S, x = (1 : M) :=
 theorem nontrivial_iff_exists_ne_one (S : Submonoid M) : Nontrivial S ↔ ∃ x ∈ S, x ≠ (1 : M) :=
   calc
     Nontrivial S ↔ ∃ x : S, x ≠ 1 := nontrivial_iff_exists_ne 1
-    _ ↔ ∃ (x : _)(hx : x ∈ S), (⟨x, hx⟩ : S) ≠ ⟨1, S.one_mem⟩ := Subtype.exists
+    _ ↔ ∃ (x : _) (hx : x ∈ S), (⟨x, hx⟩ : S) ≠ ⟨1, S.one_mem⟩ := Subtype.exists
     _ ↔ ∃ x ∈ S, x ≠ (1 : M) := by simp [Ne.def]
 #align submonoid.nontrivial_iff_exists_ne_one Submonoid.nontrivial_iff_exists_ne_one
 #align add_submonoid.nontrivial_iff_exists_ne_zero AddSubmonoid.nontrivial_iff_exists_ne_zero
chore: fix many typos (#4535)

Run codespell Mathlib and keep some suggestions.

Diff
@@ -1012,7 +1012,7 @@ interchangeable without proof obligations.
 
 A convenient candidate definition for range which is mathematically correct is `map ⊤ f`, just as
 `Set.range` could have been defined as `f '' Set.univ`. However, this lacks the desired definitional
-convenience, in that it both does not match `Set.range`, and that it introduces a redudant `x ∈ ⊤`
+convenience, in that it both does not match `Set.range`, and that it introduces a redundant `x ∈ ⊤`
 term which clutters proofs. In such a case one may resort to the `copy`
 pattern. A `copy` function converts the definitional problem for the carrier set of a subobject
 into a one-off propositional proof obligation which one discharges while writing the definition of
@@ -1471,8 +1471,8 @@ section Actions
 
 /-! ### Actions by `Submonoid`s
 
-These instances tranfer the action by an element `m : M` of a monoid `M` written as `m • a` onto the
-action by an element `s : S` of a submonoid `S : Submonoid M` such that `s • a = (s : M) • a`.
+These instances transfer the action by an element `m : M` of a monoid `M` written as `m • a` onto
+the action by an element `s : S` of a submonoid `S : Submonoid M` such that `s • a = (s : M) • a`.
 
 These instances work particularly well in conjunction with `Monoid.toMulAction`, enabling
 `s • m` as an alias for `↑s * m`.
refactor: use the typeclass SProd to implement overloaded notation · ×ˢ · (#4200)

Currently, the following notations are changed from · ×ˢ · because Lean 4 can't deal with ambiguous notations. | Definition | Notation | | :

Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: Chris Hughes <chrishughes24@gmail.com>

Diff
@@ -848,7 +848,8 @@ def prod (s : Submonoid M) (t : Submonoid N) :
 #align add_submonoid.prod AddSubmonoid.prod
 
 @[to_additive coe_prod]
-theorem coe_prod (s : Submonoid M) (t : Submonoid N) : (s.prod t : Set (M × N)) = s ×ˢ t :=
+theorem coe_prod (s : Submonoid M) (t : Submonoid N) :
+    (s.prod t : Set (M × N)) = (s : Set M) ×ˢ (t : Set N) :=
   rfl
 #align submonoid.coe_prod Submonoid.coe_prod
 #align add_submonoid.coe_prod AddSubmonoid.coe_prod
chore: fix upper/lowercase in comments (#4360)
  • Run a non-interactive version of fix-comments.py on all files.
  • Go through the diff and manually add/discard/edit chunks.
Diff
@@ -1468,7 +1468,7 @@ theorem Submonoid.equivMapOfInjective_coe_mulEquiv (e : M ≃* N) :
 
 section Actions
 
-/-! ### Actions by `submonoid`s
+/-! ### Actions by `Submonoid`s
 
 These instances tranfer the action by an element `m : M` of a monoid `M` written as `m • a` onto the
 action by an element `s : S` of a submonoid `S : Submonoid M` such that `s • a = (s : M) • a`.
chore: Rename to sSup/iSup (#3938)

As discussed on Zulip

Renames

  • supₛsSup
  • infₛsInf
  • supᵢiSup
  • infᵢiInf
  • bsupₛbsSup
  • binfₛbsInf
  • bsupᵢbiSup
  • binfᵢbiInf
  • csupₛcsSup
  • cinfₛcsInf
  • csupᵢciSup
  • cinfᵢciInf
  • unionₛsUnion
  • interₛsInter
  • unionᵢiUnion
  • interᵢiInter
  • bunionₛbsUnion
  • binterₛbsInter
  • bunionᵢbiUnion
  • binterᵢbiInter

Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>

Diff
@@ -332,10 +332,10 @@ theorem map_sup (S T : Submonoid M) (f : F) : (S ⊔ T).map f = S.map f ⊔ T.ma
 #align add_submonoid.map_sup AddSubmonoid.map_sup
 
 @[to_additive]
-theorem map_supᵢ {ι : Sort _} (f : F) (s : ι → Submonoid M) : (supᵢ s).map f = ⨆ i, (s i).map f :=
-  (gc_map_comap f : GaloisConnection (map f) (comap f)).l_supᵢ
-#align submonoid.map_supr Submonoid.map_supᵢ
-#align add_submonoid.map_supr AddSubmonoid.map_supᵢ
+theorem map_iSup {ι : Sort _} (f : F) (s : ι → Submonoid M) : (iSup s).map f = ⨆ i, (s i).map f :=
+  (gc_map_comap f : GaloisConnection (map f) (comap f)).l_iSup
+#align submonoid.map_supr Submonoid.map_iSup
+#align add_submonoid.map_supr AddSubmonoid.map_iSup
 
 @[to_additive]
 theorem comap_inf (S T : Submonoid N) (f : F) : (S ⊓ T).comap f = S.comap f ⊓ T.comap f :=
@@ -344,11 +344,11 @@ theorem comap_inf (S T : Submonoid N) (f : F) : (S ⊓ T).comap f = S.comap f 
 #align add_submonoid.comap_inf AddSubmonoid.comap_inf
 
 @[to_additive]
-theorem comap_infᵢ {ι : Sort _} (f : F) (s : ι → Submonoid N) :
-    (infᵢ s).comap f = ⨅ i, (s i).comap f :=
-  (gc_map_comap f : GaloisConnection (map f) (comap f)).u_infᵢ
-#align submonoid.comap_infi Submonoid.comap_infᵢ
-#align add_submonoid.comap_infi AddSubmonoid.comap_infᵢ
+theorem comap_iInf {ι : Sort _} (f : F) (s : ι → Submonoid N) :
+    (iInf s).comap f = ⨅ i, (s i).comap f :=
+  (gc_map_comap f : GaloisConnection (map f) (comap f)).u_iInf
+#align submonoid.comap_infi Submonoid.comap_iInf
+#align add_submonoid.comap_infi AddSubmonoid.comap_iInf
 
 @[to_additive (attr := simp)]
 theorem map_bot (f : F) : (⊥ : Submonoid M).map f = ⊥ :=
@@ -404,10 +404,10 @@ theorem comap_inf_map_of_injective (S T : Submonoid M) : (S.map f ⊓ T.map f).c
 #align add_submonoid.comap_inf_map_of_injective AddSubmonoid.comap_inf_map_of_injective
 
 @[to_additive]
-theorem comap_infᵢ_map_of_injective (S : ι → Submonoid M) : (⨅ i, (S i).map f).comap f = infᵢ S :=
-  (gciMapComap hf).u_infᵢ_l _
-#align submonoid.comap_infi_map_of_injective Submonoid.comap_infᵢ_map_of_injective
-#align add_submonoid.comap_infi_map_of_injective AddSubmonoid.comap_infᵢ_map_of_injective
+theorem comap_iInf_map_of_injective (S : ι → Submonoid M) : (⨅ i, (S i).map f).comap f = iInf S :=
+  (gciMapComap hf).u_iInf_l _
+#align submonoid.comap_infi_map_of_injective Submonoid.comap_iInf_map_of_injective
+#align add_submonoid.comap_infi_map_of_injective AddSubmonoid.comap_iInf_map_of_injective
 
 @[to_additive]
 theorem comap_sup_map_of_injective (S T : Submonoid M) : (S.map f ⊔ T.map f).comap f = S ⊔ T :=
@@ -416,10 +416,10 @@ theorem comap_sup_map_of_injective (S T : Submonoid M) : (S.map f ⊔ T.map f).c
 #align add_submonoid.comap_sup_map_of_injective AddSubmonoid.comap_sup_map_of_injective
 
 @[to_additive]
-theorem comap_supᵢ_map_of_injective (S : ι → Submonoid M) : (⨆ i, (S i).map f).comap f = supᵢ S :=
-  (gciMapComap hf).u_supᵢ_l _
-#align submonoid.comap_supr_map_of_injective Submonoid.comap_supᵢ_map_of_injective
-#align add_submonoid.comap_supr_map_of_injective AddSubmonoid.comap_supᵢ_map_of_injective
+theorem comap_iSup_map_of_injective (S : ι → Submonoid M) : (⨆ i, (S i).map f).comap f = iSup S :=
+  (gciMapComap hf).u_iSup_l _
+#align submonoid.comap_supr_map_of_injective Submonoid.comap_iSup_map_of_injective
+#align add_submonoid.comap_supr_map_of_injective AddSubmonoid.comap_iSup_map_of_injective
 
 @[to_additive]
 theorem map_le_map_iff_of_injective {S T : Submonoid M} : S.map f ≤ T.map f ↔ S ≤ T :=
@@ -473,10 +473,10 @@ theorem map_inf_comap_of_surjective (S T : Submonoid N) : (S.comap f ⊓ T.comap
 #align add_submonoid.map_inf_comap_of_surjective AddSubmonoid.map_inf_comap_of_surjective
 
 @[to_additive]
-theorem map_infᵢ_comap_of_surjective (S : ι → Submonoid N) : (⨅ i, (S i).comap f).map f = infᵢ S :=
-  (giMapComap hf).l_infᵢ_u _
-#align submonoid.map_infi_comap_of_surjective Submonoid.map_infᵢ_comap_of_surjective
-#align add_submonoid.map_infi_comap_of_surjective AddSubmonoid.map_infᵢ_comap_of_surjective
+theorem map_iInf_comap_of_surjective (S : ι → Submonoid N) : (⨅ i, (S i).comap f).map f = iInf S :=
+  (giMapComap hf).l_iInf_u _
+#align submonoid.map_infi_comap_of_surjective Submonoid.map_iInf_comap_of_surjective
+#align add_submonoid.map_infi_comap_of_surjective AddSubmonoid.map_iInf_comap_of_surjective
 
 @[to_additive]
 theorem map_sup_comap_of_surjective (S T : Submonoid N) : (S.comap f ⊔ T.comap f).map f = S ⊔ T :=
@@ -485,10 +485,10 @@ theorem map_sup_comap_of_surjective (S T : Submonoid N) : (S.comap f ⊔ T.comap
 #align add_submonoid.map_sup_comap_of_surjective AddSubmonoid.map_sup_comap_of_surjective
 
 @[to_additive]
-theorem map_supᵢ_comap_of_surjective (S : ι → Submonoid N) : (⨆ i, (S i).comap f).map f = supᵢ S :=
-  (giMapComap hf).l_supᵢ_u _
-#align submonoid.map_supr_comap_of_surjective Submonoid.map_supᵢ_comap_of_surjective
-#align add_submonoid.map_supr_comap_of_surjective AddSubmonoid.map_supᵢ_comap_of_surjective
+theorem map_iSup_comap_of_surjective (S : ι → Submonoid N) : (⨆ i, (S i).comap f).map f = iSup S :=
+  (giMapComap hf).l_iSup_u _
+#align submonoid.map_supr_comap_of_surjective Submonoid.map_iSup_comap_of_surjective
+#align add_submonoid.map_supr_comap_of_surjective AddSubmonoid.map_iSup_comap_of_surjective
 
 @[to_additive]
 theorem comap_le_comap_iff_of_surjective {S T : Submonoid N} : S.comap f ≤ T.comap f ↔ S ≤ T :=
Diff
@@ -1376,9 +1376,7 @@ theorem nontrivial_iff_exists_ne_one (S : Submonoid M) : Nontrivial S ↔ ∃ x
 /-- A submonoid is either the trivial submonoid or nontrivial. -/
 @[to_additive "An additive submonoid is either the trivial additive submonoid or nontrivial."]
 theorem bot_or_nontrivial (S : Submonoid M) : S = ⊥ ∨ Nontrivial S := by
-  have := Classical.em (∀ (x : M), x ∈ S → x = 1)
-  simp_rw [not_forall, not_imp, bex_def] at this
-  simp [eq_bot_iff_forall, nontrivial_iff_exists_ne_one, ← not_forall, this]
+  simp only [eq_bot_iff_forall, nontrivial_iff_exists_ne_one, ← not_forall, ← not_imp, Classical.em]
 #align submonoid.bot_or_nontrivial Submonoid.bot_or_nontrivial
 #align add_submonoid.bot_or_nontrivial AddSubmonoid.bot_or_nontrivial
 
feat: sync GroupTheory.Submonoid.Operations (#2666)
Diff
@@ -5,7 +5,7 @@ Authors: Johannes Hölzl, Kenny Lau, Johan Commelin, Mario Carneiro, Kevin Buzza
 Amelia Livingston, Yury Kudryashov
 
 ! This file was ported from Lean 3 source module group_theory.submonoid.operations
-! leanprover-community/mathlib commit ba2245edf0c8bb155f1569fd9b9492a9b384cde6
+! leanprover-community/mathlib commit cf8e77c636317b059a8ce20807a29cf3772a0640
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -808,8 +808,10 @@ theorem topEquiv_toMonoidHom : (topEquiv : _ ≃* M).toMonoidHom = (⊤ : Submon
 #align submonoid.top_equiv_to_monoid_hom Submonoid.topEquiv_toMonoidHom
 #align add_submonoid.top_equiv_to_add_monoid_hom AddSubmonoid.topEquiv_toAddMonoidHom
 
-/-- A submonoid is isomorphic to its image under an injective function -/
-@[to_additive "An additive submonoid is isomorphic to its image under an injective function"]
+/-- A subgroup is isomorphic to its image under an injective function. If you have an isomorphism,
+use `MulEquiv.submonoidMap` for better definitional equalities. -/
+@[to_additive "An additive subgroup is isomorphic to its image under an injective function. If you
+have an isomorphism, use `AddEquiv.addSubmonoidMap` for better definitional equalities."]
 noncomputable def equivMapOfInjective (f : M →* N) (hf : Function.Injective f) : S ≃* S.map f :=
   { Equiv.Set.image f S hf with map_mul' := fun _ _ => Subtype.ext (f.map_mul _ _) }
 #align submonoid.equiv_map_of_injective Submonoid.equivMapOfInjective
@@ -1433,21 +1435,39 @@ def ofLeftInverse' (f : M →* N) {g : N → M} (h : Function.LeftInverse g f) :
 /-- A `MulEquiv` `φ` between two monoids `M` and `N` induces a `MulEquiv` between
 a submonoid `S ≤ M` and the submonoid `φ(S) ≤ N`.
 See `MonoidHom.submonoidMap` for a variant for `MonoidHom`s. -/
-@[to_additive (attr := simps)
+@[to_additive
       "An `AddEquiv` `φ` between two additive monoids `M` and `N` induces an `AddEquiv`
       between a submonoid `S ≤ M` and the submonoid `φ(S) ≤ N`. See
       `AddMonoidHom.addSubmonoidMap` for a variant for `AddMonoidHom`s."]
 def submonoidMap (e : M ≃* N) (S : Submonoid M) : S ≃* S.map e.toMonoidHom :=
-  { -- we restate this for `simps` to avoid `⇑e.symm.to_equiv x`
-    e.toMonoidHom.submonoidMap S,
-    e.toEquiv.image S with
-    toFun := fun x => ⟨e x, _⟩
-    invFun := fun x => ⟨e.symm x, _⟩ }
+  { (e : M ≃ N).image S with map_mul' := fun _ _ => Subtype.ext (map_mul e _ _) }
 #align mul_equiv.submonoid_map MulEquiv.submonoidMap
 #align add_equiv.add_submonoid_map AddEquiv.addSubmonoidMap
 
+@[to_additive (attr := simp)]
+theorem coe_submonoidMap_apply (e : M ≃* N) (S : Submonoid M) (g : S) :
+    ((submonoidMap e S g : S.map (e : M →* N)) : N) = e g :=
+  rfl
+#align mul_equiv.coe_submonoid_map_apply MulEquiv.coe_submonoidMap_apply
+#align add_equiv.coe_add_submonoid_map_apply AddEquiv.coe_addSubmonoidMap_apply
+
+@[to_additive (attr := simp) AddEquiv.add_submonoid_map_symm_apply]
+theorem submonoidMap_symm_apply (e : M ≃* N) (S : Submonoid M) (g : S.map (e : M →* N)) :
+    (e.submonoidMap S).symm g = ⟨e.symm g, SetLike.mem_coe.1 <| Set.mem_image_equiv.1 g.2⟩ :=
+  rfl
+#align mul_equiv.submonoid_map_symm_apply MulEquiv.submonoidMap_symm_apply
+#align add_equiv.add_submonoid_map_symm_apply AddEquiv.add_submonoid_map_symm_apply
+
 end MulEquiv
 
+@[to_additive (attr := simp)]
+theorem Submonoid.equivMapOfInjective_coe_mulEquiv (e : M ≃* N) :
+    S.equivMapOfInjective (e : M →* N) (EquivLike.injective e) = e.submonoidMap S := by
+  ext
+  rfl
+#align submonoid.equiv_map_of_injective_coe_mul_equiv Submonoid.equivMapOfInjective_coe_mulEquiv
+#align add_submonoid.equiv_map_of_injective_coe_add_equiv AddSubmonoid.equivMapOfInjective_coe_addEquiv
+
 section Actions
 
 /-! ### Actions by `submonoid`s
fix: replace symmApply by symm_apply (#2560)
Diff
@@ -92,7 +92,7 @@ def Submonoid.toAddSubmonoid : Submonoid M ≃o AddSubmonoid (Additive M) where
   right_inv x := by cases x; rfl
   map_rel_iff' := Iff.rfl
 #align submonoid.to_add_submonoid Submonoid.toAddSubmonoid
-#align submonoid.to_add_submonoid_symm_apply_coe Submonoid.toAddSubmonoid_symmApply_coe
+#align submonoid.to_add_submonoid_symm_apply_coe Submonoid.toAddSubmonoid_symm_apply_coe
 #align submonoid.to_add_submonoid_apply_coe Submonoid.toAddSubmonoid_apply_coe
 
 /-- Additive submonoids of an additive monoid `Additive M` are isomorphic to submonoids of `M`. -/
@@ -140,7 +140,7 @@ def AddSubmonoid.toSubmonoid : AddSubmonoid A ≃o Submonoid (Multiplicative A)
   right_inv x := by cases x; rfl
   map_rel_iff' := Iff.rfl
 #align add_submonoid.to_submonoid AddSubmonoid.toSubmonoid
-#align add_submonoid.to_submonoid_symm_apply_coe AddSubmonoid.toSubmonoid_symmApply_coe
+#align add_submonoid.to_submonoid_symm_apply_coe AddSubmonoid.toSubmonoid_symm_apply_coe
 #align add_submonoid.to_submonoid_apply_coe AddSubmonoid.toSubmonoid_apply_coe
 
 /-- Submonoids of a monoid `Multiplicative A` are isomorphic to additive submonoids of `A`. -/
@@ -800,7 +800,7 @@ def topEquiv : (⊤ : Submonoid M) ≃* M where
 #align submonoid.top_equiv Submonoid.topEquiv
 #align add_submonoid.top_equiv AddSubmonoid.topEquiv
 #align submonoid.top_equiv_apply Submonoid.topEquiv_apply
-#align submonoid.top_equiv_symm_apply_coe Submonoid.topEquiv_symmApply_coe
+#align submonoid.top_equiv_symm_apply_coe Submonoid.topEquiv_symm_apply_coe
 
 @[to_additive (attr := simp)]
 theorem topEquiv_toMonoidHom : (topEquiv : _ ≃* M).toMonoidHom = (⊤ : Submonoid M).subtype :=
@@ -1427,8 +1427,8 @@ def ofLeftInverse' (f : M →* N) {g : N → M} (h : Function.LeftInverse g f) :
 #align add_equiv.of_left_inverse' AddEquiv.ofLeftInverse'
 #align mul_equiv.of_left_inverse'_apply MulEquiv.ofLeftInverse'_apply
 #align add_equiv.of_left_inverse'_apply AddEquiv.ofLeftInverse'_apply
-#align mul_equiv.of_left_inverse'_symm_apply MulEquiv.ofLeftInverse'_symmApply
-#align add_equiv.of_left_inverse'_symm_apply AddEquiv.ofLeftInverse'_symmApply
+#align mul_equiv.of_left_inverse'_symm_apply MulEquiv.ofLeftInverse'_symm_apply
+#align add_equiv.of_left_inverse'_symm_apply AddEquiv.ofLeftInverse'_symm_apply
 
 /-- A `MulEquiv` `φ` between two monoids `M` and `N` induces a `MulEquiv` between
 a submonoid `S ≤ M` and the submonoid `φ(S) ≤ N`.
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
@@ -556,7 +556,7 @@ instance nPow {M} [Monoid M] {A : Type _} [SetLike A M] [SubmonoidClass A M] (S
   ⟨fun a n => ⟨a.1 ^ n, pow_mem a.2 n⟩⟩
 #align submonoid_class.has_pow SubmonoidClass.nPow
 
-attribute [to_additive nSMul] nPow
+attribute [to_additive existing nSMul] nPow
 
 @[to_additive (attr := simp, norm_cast)]
 theorem coe_pow {M} [Monoid M] {A : Type _} [SetLike A M] [SubmonoidClass A M] {S : A} (x : S)
chore: tidy various files (#2251)
Diff
@@ -71,13 +71,13 @@ submonoid, range, product, map, comap
 variable {M N P : Type _} [MulOneClass M] [MulOneClass N] [MulOneClass P] (S : Submonoid M)
 
 /-!
-### Conversion to/from `additive`/`multiplicative`
+### Conversion to/from `Additive`/`Multiplicative`
 -/
 
 
 section
 
-/-- Submonoids of monoid `M` are isomorphic to additive submonoids of `additive M`. -/
+/-- Submonoids of monoid `M` are isomorphic to additive submonoids of `Additive M`. -/
 @[simps]
 def Submonoid.toAddSubmonoid : Submonoid M ≃o AddSubmonoid (Additive M) where
   toFun S :=
@@ -645,9 +645,8 @@ instance (priority := 75) toLinearOrderedCancelCommMonoid {M} [LinearOrderedCanc
 
 /-- The natural monoid hom from a submonoid of monoid `M` to `M`. -/
 @[to_additive "The natural monoid hom from an `AddSubmonoid` of `AddMonoid` `M` to `M`."]
-def Subtype : S' →* M := by
-  use (⟨Subtype.val, rfl ⟩ : OneHom S' M)
-  simp
+def Subtype : S' →* M :=
+  ⟨(⟨Subtype.val, rfl⟩ : OneHom S' M), by simp⟩
 #align submonoid_class.subtype SubmonoidClass.Subtype
 #align add_submonoid_class.subtype AddSubmonoidClass.Subtype
 
@@ -779,9 +778,8 @@ instance toLinearOrderedCancelCommMonoid {M} [LinearOrderedCancelCommMonoid M] (
 
 /-- The natural monoid hom from a submonoid of monoid `M` to `M`. -/
 @[to_additive "The natural monoid hom from an `AddSubmonoid` of `AddMonoid` `M` to `M`."]
-def subtype : S →* M := by
-  use (⟨Subtype.val, rfl ⟩ : OneHom S M)
-  simp
+def subtype : S →* M :=
+  ⟨(⟨Subtype.val, rfl⟩ : OneHom S M), by simp⟩
 #align submonoid.subtype Submonoid.subtype
 #align add_submonoid.subtype AddSubmonoid.subtype
 
@@ -805,10 +803,10 @@ def topEquiv : (⊤ : Submonoid M) ≃* M where
 #align submonoid.top_equiv_symm_apply_coe Submonoid.topEquiv_symmApply_coe
 
 @[to_additive (attr := simp)]
-theorem top_equiv_toMonoidHom : (topEquiv : _ ≃* M).toMonoidHom = (⊤ : Submonoid M).subtype :=
+theorem topEquiv_toMonoidHom : (topEquiv : _ ≃* M).toMonoidHom = (⊤ : Submonoid M).subtype :=
   rfl
-#align submonoid.top_equiv_to_monoid_hom Submonoid.top_equiv_toMonoidHom
-#align add_submonoid.top_equiv_to_add_monoid_hom AddSubmonoid.top_equiv_toAddMonoidHom
+#align submonoid.top_equiv_to_monoid_hom Submonoid.topEquiv_toMonoidHom
+#align add_submonoid.top_equiv_to_add_monoid_hom AddSubmonoid.topEquiv_toAddMonoidHom
 
 /-- A submonoid is isomorphic to its image under an injective function -/
 @[to_additive "An additive submonoid is isomorphic to its image under an injective function"]
@@ -818,11 +816,11 @@ noncomputable def equivMapOfInjective (f : M →* N) (hf : Function.Injective f)
 #align add_submonoid.equiv_map_of_injective AddSubmonoid.equivMapOfInjective
 
 @[to_additive (attr := simp)]
-theorem coe_equiv_map_of_injective_apply (f : M →* N) (hf : Function.Injective f) (x : S) :
+theorem coe_equivMapOfInjective_apply (f : M →* N) (hf : Function.Injective f) (x : S) :
     (equivMapOfInjective S f hf x : N) = f x :=
   rfl
-#align submonoid.coe_equiv_map_of_injective_apply Submonoid.coe_equiv_map_of_injective_apply
-#align add_submonoid.coe_equiv_map_of_injective_apply AddSubmonoid.coe_equiv_map_of_injective_apply
+#align submonoid.coe_equiv_map_of_injective_apply Submonoid.coe_equivMapOfInjective_apply
+#align add_submonoid.coe_equiv_map_of_injective_apply AddSubmonoid.coe_equivMapOfInjective_apply
 
 @[to_additive (attr := simp)]
 theorem closure_closure_coe_preimage {s : Set M} : closure (((↑) : closure s → M) ⁻¹' s) = ⊤ :=
@@ -1440,8 +1438,7 @@ See `MonoidHom.submonoidMap` for a variant for `MonoidHom`s. -/
       between a submonoid `S ≤ M` and the submonoid `φ(S) ≤ N`. See
       `AddMonoidHom.addSubmonoidMap` for a variant for `AddMonoidHom`s."]
 def submonoidMap (e : M ≃* N) (S : Submonoid M) : S ≃* S.map e.toMonoidHom :=
-  {
-    -- we restate this for `simps` to avoid `⇑e.symm.to_equiv x`
+  { -- we restate this for `simps` to avoid `⇑e.symm.to_equiv x`
     e.toMonoidHom.submonoidMap S,
     e.toEquiv.image S with
     toFun := fun x => ⟨e x, _⟩
fix: use to_additive (attr := _) here and there (#2073)
Diff
@@ -792,7 +792,7 @@ theorem coe_subtype : ⇑S.subtype = Subtype.val :=
 #align add_submonoid.coe_subtype AddSubmonoid.coe_subtype
 
 /-- The top submonoid is isomorphic to the monoid. -/
-@[to_additive "The top additive submonoid is isomorphic to the additive monoid.", simps]
+@[to_additive (attr := simps) "The top additive submonoid is isomorphic to the additive monoid."]
 def topEquiv : (⊤ : Submonoid M) ≃* M where
   toFun x := x
   invFun x := ⟨x, mem_top x⟩
@@ -1119,8 +1119,8 @@ theorem restrict_mrange (f : M →* N) : mrange (f.restrict S) = S.map f := by
 #align add_monoid_hom.restrict_mrange AddMonoidHom.restrict_mrange
 
 /-- Restriction of a monoid hom to a submonoid of the codomain. -/
-@[to_additive "Restriction of an `AddMonoid` hom to an `AddSubmonoid` of the codomain.",
-  simps apply]
+@[to_additive (attr := simps apply)
+  "Restriction of an `AddMonoid` hom to an `AddSubmonoid` of the codomain."]
 def codRestrict {S} [SetLike S N] [SubmonoidClass S N] (f : M →* N) (s : S) (h : ∀ x, f x ∈ s) :
     M →* s where
   toFun n := ⟨f n, h n⟩
@@ -1131,8 +1131,7 @@ def codRestrict {S} [SetLike S N] [SubmonoidClass S N] (f : M →* N) (s : S) (h
 #align monoid_hom.cod_restrict_apply MonoidHom.codRestrict_apply
 
 /-- Restriction of a monoid hom to its range interpreted as a submonoid. -/
-@[to_additive
-      "Restriction of an `AddMonoid` hom to its range interpreted as a submonoid."]
+@[to_additive "Restriction of an `AddMonoid` hom to its range interpreted as a submonoid."]
 def mrangeRestrict {N} [MulOneClass N] (f : M →* N) : M →* (mrange f) :=
   (f.codRestrict (mrange f)) fun x => ⟨x, rfl⟩
 #align monoid_hom.mrange_restrict MonoidHom.mrangeRestrict
@@ -1244,8 +1243,8 @@ theorem mker_inr : mker (inr M N) = ⊥ := by
 #align add_monoid_hom.mker_inr AddMonoidHom.mker_inr
 
 /-- The `MonoidHom` from the preimage of a submonoid to itself. -/
-@[to_additive
-      "the `AddMonoidHom` from the preimage of an additive submonoid to itself.", simps]
+@[to_additive (attr := simps)
+      "the `AddMonoidHom` from the preimage of an additive submonoid to itself."]
 def submonoidComap (f : M →* N) (N' : Submonoid N) :
     N'.comap f →* N' where
   toFun x := ⟨f x, x.2⟩
@@ -1254,21 +1253,21 @@ def submonoidComap (f : M →* N) (N' : Submonoid N) :
 #align monoid_hom.submonoid_comap MonoidHom.submonoidComap
 #align add_monoid_hom.add_submonoid_comap AddMonoidHom.addSubmonoidComap
 #align monoid_hom.submonoid_comap_apply_coe MonoidHom.submonoidComap_apply_coe
+#align add_monoid_hom.submonoid_comap_apply_coe AddMonoidHom.addSubmonoidComap_apply_coe
 
 /-- The `MonoidHom` from a submonoid to its image.
 See `MulEquiv.SubmonoidMap` for a variant for `MulEquiv`s. -/
-@[to_additive
+@[to_additive (attr := simps)
       "the `AddMonoidHom` from an additive submonoid to its image. See
-      `AddEquiv.AddSubmonoidMap` for a variant for `AddEquiv`s.",
-  simps]
-def submonoidMap (f : M →* N) (M' : Submonoid M) :
-    M' →* M'.map f where
+      `AddEquiv.AddSubmonoidMap` for a variant for `AddEquiv`s."]
+def submonoidMap (f : M →* N) (M' : Submonoid M) : M' →* M'.map f where
   toFun x := ⟨f x, ⟨x, x.2, rfl⟩⟩
   map_one' := Subtype.eq <| f.map_one
   map_mul' x y := Subtype.eq <| f.map_mul x y
 #align monoid_hom.submonoid_map MonoidHom.submonoidMap
 #align add_monoid_hom.add_submonoid_map AddMonoidHom.addSubmonoidMap
 #align monoid_hom.submonoid_map_apply_coe MonoidHom.submonoidMap_apply_coe
+#align add_monoid_hom.submonoid_map_apply_coe AddMonoidHom.addSubmonoidMap_apply_coe
 
 @[to_additive]
 theorem submonoidMap_surjective (f : M →* N) (M' : Submonoid M) :
@@ -1412,11 +1411,10 @@ def submonoidCongr (h : S = T) : S ≃* T :=
 /-- A monoid homomorphism `f : M →* N` with a left-inverse `g : N → M` defines a multiplicative
 equivalence between `M` and `f.mrange`.
 This is a bidirectional version of `MonoidHom.mrange_restrict`. -/
-@[to_additive
+@[to_additive (attr := simps (config := { simpRhs := true }))
       "An additive monoid homomorphism `f : M →+ N` with a left-inverse `g : N → M`
       defines an additive equivalence between `M` and `f.mrange`.
-      This is a bidirectional version of `AddMonoidHom.mrange_restrict`. ",
-  simps (config := { simpRhs := true })]
+      This is a bidirectional version of `AddMonoidHom.mrange_restrict`. "]
 def ofLeftInverse' (f : M →* N) {g : N → M} (h : Function.LeftInverse g f) :
     M ≃* MonoidHom.mrange f :=
   { f.mrangeRestrict with
@@ -1430,16 +1428,17 @@ def ofLeftInverse' (f : M →* N) {g : N → M} (h : Function.LeftInverse g f) :
 #align mul_equiv.of_left_inverse' MulEquiv.ofLeftInverse'
 #align add_equiv.of_left_inverse' AddEquiv.ofLeftInverse'
 #align mul_equiv.of_left_inverse'_apply MulEquiv.ofLeftInverse'_apply
+#align add_equiv.of_left_inverse'_apply AddEquiv.ofLeftInverse'_apply
 #align mul_equiv.of_left_inverse'_symm_apply MulEquiv.ofLeftInverse'_symmApply
+#align add_equiv.of_left_inverse'_symm_apply AddEquiv.ofLeftInverse'_symmApply
 
 /-- A `MulEquiv` `φ` between two monoids `M` and `N` induces a `MulEquiv` between
 a submonoid `S ≤ M` and the submonoid `φ(S) ≤ N`.
 See `MonoidHom.submonoidMap` for a variant for `MonoidHom`s. -/
-@[to_additive
+@[to_additive (attr := simps)
       "An `AddEquiv` `φ` between two additive monoids `M` and `N` induces an `AddEquiv`
       between a submonoid `S ≤ M` and the submonoid `φ(S) ≤ N`. See
-      `AddMonoidHom.addSubmonoidMap` for a variant for `AddMonoidHom`s.",
-  simps]
+      `AddMonoidHom.addSubmonoidMap` for a variant for `AddMonoidHom`s."]
 def submonoidMap (e : M ≃* N) (S : Submonoid M) : S ≃* S.map e.toMonoidHom :=
   {
     -- we restate this for `simps` to avoid `⇑e.symm.to_equiv x`
feat: port RingTheory.Subsemiring.Basic (#1862)

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

Diff
@@ -1473,7 +1473,7 @@ section MulOneClass
 variable [MulOneClass M']
 
 @[to_additive]
-instance [SMul M' α] (S : Submonoid M') : SMul S α :=
+instance smul [SMul M' α] (S : Submonoid M') : SMul S α :=
   SMul.comp _ S.subtype
 
 @[to_additive]
@@ -1491,7 +1491,8 @@ instance smulCommClass_right [SMul α β] [SMul M' β] [SMulCommClass α M' β]
 #align add_submonoid.vadd_comm_class_right AddSubmonoid.vaddCommClass_right
 
 /-- Note that this provides `IsScalarTower S M' M'` which is needed by `SMulMulAssoc`. -/
-instance [SMul α β] [SMul M' α] [SMul M' β] [IsScalarTower M' α β] (S : Submonoid M') :
+instance isScalarTower [SMul α β] [SMul M' α] [SMul M' β] [IsScalarTower M' α β]
+      (S : Submonoid M') :
     IsScalarTower S α β :=
   ⟨fun a => (smul_assoc (a : M') : _)⟩
 
@@ -1501,7 +1502,7 @@ theorem smul_def [SMul M' α] {S : Submonoid M'} (g : S) (m : α) : g • m = (g
 #align submonoid.smul_def Submonoid.smul_def
 #align add_submonoid.vadd_def AddSubmonoid.vadd_def
 
-instance [SMul M' α] [FaithfulSMul M' α] (S : Submonoid M') : FaithfulSMul S α :=
+instance faithfulSMul [SMul M' α] [FaithfulSMul M' α] (S : Submonoid M') : FaithfulSMul S α :=
   ⟨fun h => Subtype.ext <| eq_of_smul_eq_smul h⟩
 
 end MulOneClass
@@ -1511,15 +1512,17 @@ variable [Monoid M']
 /-- The action by a submonoid is the action by the underlying monoid. -/
 @[to_additive
       "The additive action by an `AddSubmonoid` is the action by the underlying `AddMonoid`. "]
-instance [MulAction M' α] (S : Submonoid M') : MulAction S α :=
+instance mulAction [MulAction M' α] (S : Submonoid M') : MulAction S α :=
   MulAction.compHom _ S.subtype
 
 /-- The action by a submonoid is the action by the underlying monoid. -/
-instance [AddMonoid α] [DistribMulAction M' α] (S : Submonoid M') : DistribMulAction S α :=
+instance distribMulAction [AddMonoid α] [DistribMulAction M' α] (S : Submonoid M') :
+    DistribMulAction S α :=
   DistribMulAction.compHom _ S.subtype
 
 /-- The action by a submonoid is the action by the underlying monoid. -/
-instance [Monoid α] [MulDistribMulAction M' α] (S : Submonoid M') : MulDistribMulAction S α :=
+instance mulDistribMulAction [Monoid α] [MulDistribMulAction M' α] (S : Submonoid M') :
+    MulDistribMulAction S α :=
   MulDistribMulAction.compHom _ S.subtype
 
 example {S : Submonoid M'} : IsScalarTower S M' M' := by infer_instance
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
@@ -92,6 +92,8 @@ def Submonoid.toAddSubmonoid : Submonoid M ≃o AddSubmonoid (Additive M) where
   right_inv x := by cases x; rfl
   map_rel_iff' := Iff.rfl
 #align submonoid.to_add_submonoid Submonoid.toAddSubmonoid
+#align submonoid.to_add_submonoid_symm_apply_coe Submonoid.toAddSubmonoid_symmApply_coe
+#align submonoid.to_add_submonoid_apply_coe Submonoid.toAddSubmonoid_apply_coe
 
 /-- Additive submonoids of an additive monoid `Additive M` are isomorphic to submonoids of `M`. -/
 abbrev AddSubmonoid.toSubmonoid' : AddSubmonoid (Additive M) ≃o Submonoid M :=
@@ -138,6 +140,8 @@ def AddSubmonoid.toSubmonoid : AddSubmonoid A ≃o Submonoid (Multiplicative A)
   right_inv x := by cases x; rfl
   map_rel_iff' := Iff.rfl
 #align add_submonoid.to_submonoid AddSubmonoid.toSubmonoid
+#align add_submonoid.to_submonoid_symm_apply_coe AddSubmonoid.toSubmonoid_symmApply_coe
+#align add_submonoid.to_submonoid_apply_coe AddSubmonoid.toSubmonoid_apply_coe
 
 /-- Submonoids of a monoid `Multiplicative A` are isomorphic to additive submonoids of `A`. -/
 abbrev Submonoid.toAddSubmonoid' : Submonoid (Multiplicative A) ≃o AddSubmonoid A :=
@@ -797,6 +801,8 @@ def topEquiv : (⊤ : Submonoid M) ≃* M where
   map_mul' _ _ := rfl
 #align submonoid.top_equiv Submonoid.topEquiv
 #align add_submonoid.top_equiv AddSubmonoid.topEquiv
+#align submonoid.top_equiv_apply Submonoid.topEquiv_apply
+#align submonoid.top_equiv_symm_apply_coe Submonoid.topEquiv_symmApply_coe
 
 @[to_additive (attr := simp)]
 theorem top_equiv_toMonoidHom : (topEquiv : _ ≃* M).toMonoidHom = (⊤ : Submonoid M).subtype :=
@@ -1122,6 +1128,7 @@ def codRestrict {S} [SetLike S N] [SubmonoidClass S N] (f : M →* N) (s : S) (h
   map_mul' x y := Subtype.eq (f.map_mul x y)
 #align monoid_hom.cod_restrict MonoidHom.codRestrict
 #align add_monoid_hom.cod_restrict AddMonoidHom.codRestrict
+#align monoid_hom.cod_restrict_apply MonoidHom.codRestrict_apply
 
 /-- Restriction of a monoid hom to its range interpreted as a submonoid. -/
 @[to_additive
@@ -1246,6 +1253,7 @@ def submonoidComap (f : M →* N) (N' : Submonoid N) :
   map_mul' x y := Subtype.eq (f.map_mul x y)
 #align monoid_hom.submonoid_comap MonoidHom.submonoidComap
 #align add_monoid_hom.add_submonoid_comap AddMonoidHom.addSubmonoidComap
+#align monoid_hom.submonoid_comap_apply_coe MonoidHom.submonoidComap_apply_coe
 
 /-- The `MonoidHom` from a submonoid to its image.
 See `MulEquiv.SubmonoidMap` for a variant for `MulEquiv`s. -/
@@ -1260,6 +1268,7 @@ def submonoidMap (f : M →* N) (M' : Submonoid M) :
   map_mul' x y := Subtype.eq <| f.map_mul x y
 #align monoid_hom.submonoid_map MonoidHom.submonoidMap
 #align add_monoid_hom.add_submonoid_map AddMonoidHom.addSubmonoidMap
+#align monoid_hom.submonoid_map_apply_coe MonoidHom.submonoidMap_apply_coe
 
 @[to_additive]
 theorem submonoidMap_surjective (f : M →* N) (M' : Submonoid M) :
@@ -1420,6 +1429,8 @@ def ofLeftInverse' (f : M →* N) {g : N → M} (h : Function.LeftInverse g f) :
         show f (g x) = x by rw [← hx', h x'] }
 #align mul_equiv.of_left_inverse' MulEquiv.ofLeftInverse'
 #align add_equiv.of_left_inverse' AddEquiv.ofLeftInverse'
+#align mul_equiv.of_left_inverse'_apply MulEquiv.ofLeftInverse'_apply
+#align mul_equiv.of_left_inverse'_symm_apply MulEquiv.ofLeftInverse'_symmApply
 
 /-- A `MulEquiv` `φ` between two monoids `M` and `N` induces a `MulEquiv` between
 a submonoid `S ≤ M` and the submonoid `φ(S) ≤ N`.
fix: to_additive translates pow to nsmul (#1502)
  • I tried translating it to smul in #715, but that was a bad decision
  • It is possible that some lemmas that want to be called smul now use nsmul. This doesn't raise an error unless they are aligned or explicitly used elsewhere.
  • Rename some lemmas from smul to nsmul.
  • Zulip

Co-authored-by: Reid Barton <rwbarton@gmail.com>

Diff
@@ -552,21 +552,21 @@ instance nPow {M} [Monoid M] {A : Type _} [SetLike A M] [SubmonoidClass A M] (S
   ⟨fun a n => ⟨a.1 ^ n, pow_mem a.2 n⟩⟩
 #align submonoid_class.has_pow SubmonoidClass.nPow
 
-attribute [to_additive] nPow
+attribute [to_additive nSMul] nPow
 
 @[to_additive (attr := simp, norm_cast)]
 theorem coe_pow {M} [Monoid M] {A : Type _} [SetLike A M] [SubmonoidClass A M] {S : A} (x : S)
     (n : ℕ) : (x ^ n : M) = (x : M) ^ n :=
   rfl
 #align submonoid_class.coe_pow SubmonoidClass.coe_pow
-#align add_submonoid_class.coe_nsmul AddSubmonoidClass.coe_smul
+#align add_submonoid_class.coe_nsmul AddSubmonoidClass.coe_nsmul
 
 @[to_additive (attr := simp)]
 theorem mk_pow {M} [Monoid M] {A : Type _} [SetLike A M] [SubmonoidClass A M] {S : A} (x : M)
     (hx : x ∈ S) (n : ℕ) : (⟨x, hx⟩ : S) ^ n = ⟨x ^ n, pow_mem hx n⟩ :=
   rfl
 #align submonoid_class.mk_pow SubmonoidClass.mk_pow
-#align add_submonoid_class.mk_nsmul AddSubmonoidClass.mk_smul
+#align add_submonoid_class.mk_nsmul AddSubmonoidClass.mk_nsmul
 
 -- Prefer subclasses of `Monoid` over subclasses of `SubmonoidClass`.
 /-- A submonoid of a unital magma inherits a unital magma structure. -/
@@ -715,7 +715,7 @@ protected theorem pow_mem {M : Type _} [Monoid M] (S : Submonoid M) {x : M} (hx
     x ^ n ∈ S :=
   pow_mem hx n
 #align submonoid.pow_mem Submonoid.pow_mem
-#align add_submonoid.nsmul_mem AddSubmonoid.smul_mem
+#align add_submonoid.nsmul_mem AddSubmonoid.nsmul_mem
 
 -- porting note: coe_pow removed, syntactic tautology
 #noalign submonoid.coe_pow
chore: fix most phantom #aligns (#1794)
Diff
@@ -559,14 +559,14 @@ theorem coe_pow {M} [Monoid M] {A : Type _} [SetLike A M] [SubmonoidClass A M] {
     (n : ℕ) : (x ^ n : M) = (x : M) ^ n :=
   rfl
 #align submonoid_class.coe_pow SubmonoidClass.coe_pow
-#align add_submonoid_class.coe_smul AddSubmonoidClass.coe_smul
+#align add_submonoid_class.coe_nsmul AddSubmonoidClass.coe_smul
 
 @[to_additive (attr := simp)]
 theorem mk_pow {M} [Monoid M] {A : Type _} [SetLike A M] [SubmonoidClass A M] {S : A} (x : M)
     (hx : x ∈ S) (n : ℕ) : (⟨x, hx⟩ : S) ^ n = ⟨x ^ n, pow_mem hx n⟩ :=
   rfl
 #align submonoid_class.mk_pow SubmonoidClass.mk_pow
-#align add_submonoid_class.mk_smul AddSubmonoidClass.mk_smul
+#align add_submonoid_class.mk_nsmul AddSubmonoidClass.mk_smul
 
 -- Prefer subclasses of `Monoid` over subclasses of `SubmonoidClass`.
 /-- A submonoid of a unital magma inherits a unital magma structure. -/
@@ -715,7 +715,7 @@ protected theorem pow_mem {M : Type _} [Monoid M] (S : Submonoid M) {x : M} (hx
     x ^ n ∈ S :=
   pow_mem hx n
 #align submonoid.pow_mem Submonoid.pow_mem
-#align add_submonoid.smul_mem AddSubmonoid.smul_mem
+#align add_submonoid.nsmul_mem AddSubmonoid.smul_mem
 
 -- porting note: coe_pow removed, syntactic tautology
 #noalign submonoid.coe_pow
@@ -883,7 +883,8 @@ theorem top_prod_top : (⊤ : Submonoid M).prod (⊤ : Submonoid N) = ⊤ :=
 theorem bot_prod_bot : (⊥ : Submonoid M).prod (⊥ : Submonoid N) = ⊥ :=
   SetLike.coe_injective <| by simp [coe_prod, Prod.one_eq_mk]
 #align submonoid.bot_prod_bot Submonoid.bot_prod_bot
-#align add_submonoid.bot_prod_bot AddSubmonoid.bot_prod_bot
+-- Porting note: to_additive translated the name incorrectly in mathlib 3.
+#align add_submonoid.bot_sum_bot AddSubmonoid.bot_prod_bot
 
 /-- The product of submonoids is isomorphic to their product as monoids. -/
 @[to_additive prodEquiv
@@ -1120,7 +1121,7 @@ def codRestrict {S} [SetLike S N] [SubmonoidClass S N] (f : M →* N) (s : S) (h
   map_one' := Subtype.eq f.map_one
   map_mul' x y := Subtype.eq (f.map_mul x y)
 #align monoid_hom.cod_restrict MonoidHom.codRestrict
-#align add_monoid_hom.codRestrict AddMonoidHom.codRestrict
+#align add_monoid_hom.cod_restrict AddMonoidHom.codRestrict
 
 /-- Restriction of a monoid hom to its range interpreted as a submonoid. -/
 @[to_additive
@@ -1128,7 +1129,7 @@ def codRestrict {S} [SetLike S N] [SubmonoidClass S N] (f : M →* N) (s : S) (h
 def mrangeRestrict {N} [MulOneClass N] (f : M →* N) : M →* (mrange f) :=
   (f.codRestrict (mrange f)) fun x => ⟨x, rfl⟩
 #align monoid_hom.mrange_restrict MonoidHom.mrangeRestrict
-#align add_monoid_hom.mrangeRestrict AddMonoidHom.mrangeRestrict
+#align add_monoid_hom.mrange_restrict AddMonoidHom.mrangeRestrict
 
 @[to_additive (attr := simp)]
 theorem coe_mrangeRestrict {N} [MulOneClass N] (f : M →* N) (x : M) :
@@ -1210,14 +1211,16 @@ theorem prod_map_comap_prod' {M' : Type _} {N' : Type _} [MulOneClass M'] [MulOn
     (S.prod S').comap (prodMap f g) = (S.comap f).prod (S'.comap g) :=
   SetLike.coe_injective <| Set.preimage_prod_map_prod f g _ _
 #align monoid_hom.prod_map_comap_prod' MonoidHom.prod_map_comap_prod'
-#align add_monoid_hom.prod_map_comap_prod' AddMonoidHom.prod_map_comap_prod'
+-- Porting note: to_additive translated the name incorrectly in mathlib 3.
+#align add_monoid_hom.sum_map_comap_sum' AddMonoidHom.prod_map_comap_prod'
 
 @[to_additive mker_prod_map]
 theorem mker_prod_map {M' : Type _} {N' : Type _} [MulOneClass M'] [MulOneClass N'] (f : M →* N)
     (g : M' →* N') : mker (prodMap f g) = f.mker.prod (mker g) := by
   rw [← comap_bot', ← comap_bot', ← comap_bot', ← prod_map_comap_prod', bot_prod_bot]
 #align monoid_hom.mker_prod_map MonoidHom.mker_prod_map
-#align add_monoid_hom.mker_prod_map AddMonoidHom.mker_prod_map
+-- Porting note: to_additive translated the name incorrectly in mathlib 3.
+#align add_monoid_hom.mker_sum_map AddMonoidHom.mker_prod_map
 
 @[to_additive (attr := simp)]
 theorem mker_inl : mker (inl M N) = ⊥ := by
@@ -1310,14 +1313,16 @@ theorem mrange_snd : mrange (snd M N) = ⊤ :=
 theorem prod_eq_bot_iff {s : Submonoid M} {t : Submonoid N} : s.prod t = ⊥ ↔ s = ⊥ ∧ t = ⊥ := by
   simp only [eq_bot_iff, prod_le_iff, (gc_map_comap _).le_iff_le, comap_bot', mker_inl, mker_inr]
 #align submonoid.prod_eq_bot_iff Submonoid.prod_eq_bot_iff
-#align add_submonoid.prod_eq_bot_iff AddSubmonoid.prod_eq_bot_iff
+-- Porting note: to_additive translated the name incorrectly in mathlib 3.
+#align add_submonoid.sum_eq_bot_iff AddSubmonoid.prod_eq_bot_iff
 
 @[to_additive prod_eq_top_iff]
 theorem prod_eq_top_iff {s : Submonoid M} {t : Submonoid N} : s.prod t = ⊤ ↔ s = ⊤ ∧ t = ⊤ := by
   simp only [eq_top_iff, le_prod_iff, ← (gc_map_comap _).le_iff_le, ← mrange_eq_map, mrange_fst,
     mrange_snd]
 #align submonoid.prod_eq_top_iff Submonoid.prod_eq_top_iff
-#align add_submonoid.prod_eq_top_iff AddSubmonoid.prod_eq_top_iff
+-- Porting note: to_additive translated the name incorrectly in mathlib 3.
+#align add_submonoid.sum_eq_top_iff AddSubmonoid.prod_eq_top_iff
 
 @[to_additive (attr := simp)]
 theorem mrange_inl_sup_mrange_inr : mrange (inl M N) ⊔ mrange (inr M N) = ⊤ := by
chore: tidy various files (#1693)
Diff
@@ -424,10 +424,10 @@ theorem map_le_map_iff_of_injective {S T : Submonoid M} : S.map f ≤ T.map f 
 #align add_submonoid.map_le_map_iff_of_injective AddSubmonoid.map_le_map_iff_of_injective
 
 @[to_additive]
-theorem map_strict_mono_of_injective : StrictMono (map f) :=
+theorem map_strictMono_of_injective : StrictMono (map f) :=
   (gciMapComap hf).strictMono_l
-#align submonoid.map_strict_mono_of_injective Submonoid.map_strict_mono_of_injective
-#align add_submonoid.map_strict_mono_of_injective AddSubmonoid.map_strict_mono_of_injective
+#align submonoid.map_strict_mono_of_injective Submonoid.map_strictMono_of_injective
+#align add_submonoid.map_strict_mono_of_injective AddSubmonoid.map_strictMono_of_injective
 
 end GaloisCoinsertion
 
@@ -493,10 +493,10 @@ theorem comap_le_comap_iff_of_surjective {S T : Submonoid N} : S.comap f ≤ T.c
 #align add_submonoid.comap_le_comap_iff_of_surjective AddSubmonoid.comap_le_comap_iff_of_surjective
 
 @[to_additive]
-theorem comap_strict_mono_of_surjective : StrictMono (comap f) :=
+theorem comap_strictMono_of_surjective : StrictMono (comap f) :=
   (giMapComap hf).strictMono_u
-#align submonoid.comap_strict_mono_of_surjective Submonoid.comap_strict_mono_of_surjective
-#align add_submonoid.comap_strict_mono_of_surjective AddSubmonoid.comap_strict_mono_of_surjective
+#align submonoid.comap_strict_mono_of_surjective Submonoid.comap_strictMono_of_surjective
+#align add_submonoid.comap_strict_mono_of_surjective AddSubmonoid.comap_strictMono_of_surjective
 
 end GaloisInsertion
 
feat: port GroupTheory.Submonoid.Membership (#1699)

Co-authored-by: ChrisHughes24 <chrishughes24@gmail.com>

Diff
@@ -542,7 +542,7 @@ variable {A : Type _} [SetLike A M] [hA : SubmonoidClass A M] (S' : A)
 /-- An `AddSubmonoid` of an `AddMonoid` inherits a scalar multiplication. -/
 instance AddSubmonoidClass.nSMul {M} [AddMonoid M] {A : Type _} [SetLike A M]
     [AddSubmonoidClass A M] (S : A) : SMul ℕ S :=
-  ⟨fun n a => ⟨n • a.1, smul_mem a.2 n⟩⟩
+  ⟨fun n a => ⟨n • a.1, nsmul_mem a.2 n⟩⟩
 #align add_submonoid_class.has_nsmul AddSubmonoidClass.nSMul
 
 namespace SubmonoidClass
chore: the style linter shouldn't complain about long #align lines (#1643)
Diff
@@ -613,12 +613,8 @@ instance (priority := 75) toLinearOrderedCommMonoid {M} [LinearOrderedCommMonoid
     [SetLike A M] [SubmonoidClass A M] (S : A) : LinearOrderedCommMonoid S :=
   Subtype.coe_injective.linearOrderedCommMonoid (↑) rfl (fun _ _ => rfl) (fun _ _ => rfl)
     (fun _ _ => rfl) fun _ _ => rfl
-#align
-  submonoid_class.to_linear_ordered_comm_monoid
-  SubmonoidClass.toLinearOrderedCommMonoid
-#align
-  add_submonoid_class.to_linear_ordered_add_comm_monoid
-  AddSubmonoidClass.toLinearOrderedAddCommMonoid
+#align submonoid_class.to_linear_ordered_comm_monoid SubmonoidClass.toLinearOrderedCommMonoid
+#align add_submonoid_class.to_linear_ordered_add_comm_monoid AddSubmonoidClass.toLinearOrderedAddCommMonoid
 
 -- Prefer subclasses of `Monoid` over subclasses of `SubmonoidClass`.
 /-- A submonoid of an `OrderedCancelCommMonoid` is an `OrderedCancelCommMonoid`. -/
@@ -628,9 +624,7 @@ instance (priority := 75) toOrderedCancelCommMonoid {M} [OrderedCancelCommMonoid
     [SetLike A M] [SubmonoidClass A M] (S : A) : OrderedCancelCommMonoid S :=
   Subtype.coe_injective.orderedCancelCommMonoid (↑) rfl (fun _ _ => rfl) fun _ _ => rfl
 #align submonoid_class.to_ordered_cancel_comm_monoid SubmonoidClass.toOrderedCancelCommMonoid
-#align
-  add_submonoid_class.to_ordered_cancel_add_comm_monoid
-  AddSubmonoidClass.toOrderedCancelAddCommMonoid
+#align add_submonoid_class.to_ordered_cancel_add_comm_monoid AddSubmonoidClass.toOrderedCancelAddCommMonoid
 
 -- Prefer subclasses of `Monoid` over subclasses of `SubmonoidClass`.
 /-- A submonoid of a `LinearOrderedCancelCommMonoid` is a `LinearOrderedCancelCommMonoid`.
@@ -642,12 +636,8 @@ instance (priority := 75) toLinearOrderedCancelCommMonoid {M} [LinearOrderedCanc
     {A : Type _} [SetLike A M] [SubmonoidClass A M] (S : A) : LinearOrderedCancelCommMonoid S :=
   Subtype.coe_injective.linearOrderedCancelCommMonoid (↑) rfl (fun _ _ => rfl) (fun _ _ => rfl)
     (fun _ _ => rfl) fun _ _ => rfl
-#align
-  submonoid_class.to_linear_ordered_cancel_comm_monoid
-  SubmonoidClass.toLinearOrderedCancelCommMonoid
-#align
-  add_submonoid_class.to_linear_ordered_cancel_add_comm_monoid
-  AddSubmonoidClass.toLinearOrderedCancelAddCommMonoid
+#align submonoid_class.to_linear_ordered_cancel_comm_monoid SubmonoidClass.toLinearOrderedCancelCommMonoid
+#align add_submonoid_class.to_linear_ordered_cancel_add_comm_monoid AddSubmonoidClass.toLinearOrderedCancelAddCommMonoid
 
 /-- The natural monoid hom from a submonoid of monoid `M` to `M`. -/
 @[to_additive "The natural monoid hom from an `AddSubmonoid` of `AddMonoid` `M` to `M`."]
@@ -780,12 +770,8 @@ instance toLinearOrderedCancelCommMonoid {M} [LinearOrderedCancelCommMonoid M] (
     LinearOrderedCancelCommMonoid S :=
   Subtype.coe_injective.linearOrderedCancelCommMonoid (↑) rfl (fun _ _ => rfl) (fun _ _ => rfl)
     (fun _ _ => rfl) fun _ _ => rfl
-#align
-  submonoid.to_linear_ordered_cancel_comm_monoid
-  Submonoid.toLinearOrderedCancelCommMonoid
-#align
-  add_submonoid.to_linear_ordered_cancel_add_comm_monoid
-  AddSubmonoid.toLinearOrderedCancelAddCommMonoid
+#align submonoid.to_linear_ordered_cancel_comm_monoid Submonoid.toLinearOrderedCancelCommMonoid
+#align add_submonoid.to_linear_ordered_cancel_add_comm_monoid AddSubmonoid.toLinearOrderedCancelAddCommMonoid
 
 /-- The natural monoid hom from a submonoid of monoid `M` to `M`. -/
 @[to_additive "The natural monoid hom from an `AddSubmonoid` of `AddMonoid` `M` to `M`."]
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
@@ -185,13 +185,13 @@ def comap (f : F) (S : Submonoid N) :
 #align submonoid.comap Submonoid.comap
 #align add_submonoid.comap AddSubmonoid.comap
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem coe_comap (S : Submonoid N) (f : F) : (S.comap f : Set M) = f ⁻¹' S :=
   rfl
 #align submonoid.coe_comap Submonoid.coe_comap
 #align add_submonoid.coe_comap AddSubmonoid.coe_comap
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem mem_comap {S : Submonoid N} {f : F} {x : M} : x ∈ S.comap f ↔ f x ∈ S :=
   Iff.rfl
 #align submonoid.mem_comap Submonoid.mem_comap
@@ -204,7 +204,7 @@ theorem comap_comap (S : Submonoid P) (g : N →* P) (f : M →* N) :
 #align submonoid.comap_comap Submonoid.comap_comap
 #align add_submonoid.comap_comap AddSubmonoid.comap_comap
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem comap_id (S : Submonoid P) : S.comap (MonoidHom.id P) = S :=
   ext (by simp)
 #align submonoid.comap_id Submonoid.comap_id
@@ -223,13 +223,13 @@ def map (f : F) (S : Submonoid M) :
 #align submonoid.map Submonoid.map
 #align add_submonoid.map AddSubmonoid.map
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem coe_map (f : F) (S : Submonoid M) : (S.map f : Set N) = f '' S :=
   rfl
 #align submonoid.coe_map Submonoid.coe_map
 #align add_submonoid.coe_map AddSubmonoid.coe_map
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem mem_map {f : F} {S : Submonoid M} {y : N} : y ∈ S.map f ↔ ∃ x ∈ S, f x = y := by
   rw [← bex_def]
   exact mem_image_iff_bex
@@ -309,13 +309,13 @@ theorem monotone_comap {f : F} : Monotone (comap f) :=
 #align submonoid.monotone_comap Submonoid.monotone_comap
 #align add_submonoid.monotone_comap AddSubmonoid.monotone_comap
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem map_comap_map {f : F} : ((S.map f).comap f).map f = S.map f :=
   (gc_map_comap f).l_u_l_eq_l _
 #align submonoid.map_comap_map Submonoid.map_comap_map
 #align add_submonoid.map_comap_map AddSubmonoid.map_comap_map
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem comap_map_comap {S : Submonoid N} {f : F} : ((S.comap f).map f).comap f = S.comap f :=
   (gc_map_comap f).u_l_u_eq_u _
 #align submonoid.comap_map_comap Submonoid.comap_map_comap
@@ -346,19 +346,19 @@ theorem comap_infᵢ {ι : Sort _} (f : F) (s : ι → Submonoid N) :
 #align submonoid.comap_infi Submonoid.comap_infᵢ
 #align add_submonoid.comap_infi AddSubmonoid.comap_infᵢ
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem map_bot (f : F) : (⊥ : Submonoid M).map f = ⊥ :=
   (gc_map_comap f).l_bot
 #align submonoid.map_bot Submonoid.map_bot
 #align add_submonoid.map_bot AddSubmonoid.map_bot
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem comap_top (f : F) : (⊤ : Submonoid N).comap f = ⊤ :=
   (gc_map_comap f).u_top
 #align submonoid.comap_top Submonoid.comap_top
 #align add_submonoid.comap_top AddSubmonoid.comap_top
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem map_id (S : Submonoid M) : S.map (MonoidHom.id M) = S :=
   ext fun _ => ⟨fun ⟨_, h, rfl⟩ => h, fun h => ⟨_, h, rfl⟩⟩
 #align submonoid.map_id Submonoid.map_id
@@ -513,7 +513,7 @@ instance one : One S' :=
 #align one_mem_class.has_one OneMemClass.one
 #align zero_mem_class.has_zero ZeroMemClass.zero
 
-@[simp, norm_cast, to_additive]
+@[to_additive (attr := simp, norm_cast)]
 theorem coe_one : ((1 : S') : M₁) = 1 :=
   rfl
 #align one_mem_class.coe_one OneMemClass.coe_one
@@ -521,7 +521,7 @@ theorem coe_one : ((1 : S') : M₁) = 1 :=
 
 variable {S'}
 
-@[simp, norm_cast, to_additive]
+@[to_additive (attr := simp, norm_cast)]
 theorem coe_eq_one {x : S'} : (↑x : M₁) = 1 ↔ x = 1 :=
   (Subtype.ext_iff.symm : (x : M₁) = (1 : S') ↔ x = 1)
 #align one_mem_class.coe_eq_one OneMemClass.coe_eq_one
@@ -554,14 +554,14 @@ instance nPow {M} [Monoid M] {A : Type _} [SetLike A M] [SubmonoidClass A M] (S
 
 attribute [to_additive] nPow
 
-@[simp, norm_cast, to_additive]
+@[to_additive (attr := simp, norm_cast)]
 theorem coe_pow {M} [Monoid M] {A : Type _} [SetLike A M] [SubmonoidClass A M] {S : A} (x : S)
     (n : ℕ) : (x ^ n : M) = (x : M) ^ n :=
   rfl
 #align submonoid_class.coe_pow SubmonoidClass.coe_pow
 #align add_submonoid_class.coe_smul AddSubmonoidClass.coe_smul
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem mk_pow {M} [Monoid M] {A : Type _} [SetLike A M] [SubmonoidClass A M] {S : A} (x : M)
     (hx : x ∈ S) (n : ℕ) : (⟨x, hx⟩ : S) ^ n = ⟨x ^ n, pow_mem hx n⟩ :=
   rfl
@@ -657,7 +657,7 @@ def Subtype : S' →* M := by
 #align submonoid_class.subtype SubmonoidClass.Subtype
 #align add_submonoid_class.subtype AddSubmonoidClass.Subtype
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem coe_subtype : (SubmonoidClass.Subtype S' : S' → M) = Subtype.val :=
   rfl
 #align submonoid_class.coe_subtype SubmonoidClass.coe_subtype
@@ -681,19 +681,19 @@ instance one : One S :=
 #align submonoid.has_one Submonoid.one
 #align add_submonoid.has_zero AddSubmonoid.zero
 
-@[simp, norm_cast, to_additive]
+@[to_additive (attr := simp, norm_cast)]
 theorem coe_mul (x y : S) : (↑(x * y) : M) = ↑x * ↑y :=
   rfl
 #align submonoid.coe_mul Submonoid.coe_mul
 #align add_submonoid.coe_add AddSubmonoid.coe_add
 
-@[simp, norm_cast, to_additive]
+@[to_additive (attr := simp, norm_cast)]
 theorem coe_one : ((1 : S) : M) = 1 :=
   rfl
 #align submonoid.coe_one Submonoid.coe_one
 #align add_submonoid.coe_zero AddSubmonoid.coe_zero
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem mk_mul_mk (x y : M) (hx : x ∈ S) (hy : y ∈ S) :
     (⟨x, hx⟩ : S) * ⟨y, hy⟩ = ⟨x * y, S.mul_mem hx hy⟩ :=
   rfl
@@ -795,7 +795,7 @@ def subtype : S →* M := by
 #align submonoid.subtype Submonoid.subtype
 #align add_submonoid.subtype AddSubmonoid.subtype
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem coe_subtype : ⇑S.subtype = Subtype.val :=
   rfl
 #align submonoid.coe_subtype Submonoid.coe_subtype
@@ -812,7 +812,7 @@ def topEquiv : (⊤ : Submonoid M) ≃* M where
 #align submonoid.top_equiv Submonoid.topEquiv
 #align add_submonoid.top_equiv AddSubmonoid.topEquiv
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem top_equiv_toMonoidHom : (topEquiv : _ ≃* M).toMonoidHom = (⊤ : Submonoid M).subtype :=
   rfl
 #align submonoid.top_equiv_to_monoid_hom Submonoid.top_equiv_toMonoidHom
@@ -825,14 +825,14 @@ noncomputable def equivMapOfInjective (f : M →* N) (hf : Function.Injective f)
 #align submonoid.equiv_map_of_injective Submonoid.equivMapOfInjective
 #align add_submonoid.equiv_map_of_injective AddSubmonoid.equivMapOfInjective
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem coe_equiv_map_of_injective_apply (f : M →* N) (hf : Function.Injective f) (x : S) :
     (equivMapOfInjective S f hf x : N) = f x :=
   rfl
 #align submonoid.coe_equiv_map_of_injective_apply Submonoid.coe_equiv_map_of_injective_apply
 #align add_submonoid.coe_equiv_map_of_injective_apply AddSubmonoid.coe_equiv_map_of_injective_apply
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem closure_closure_coe_preimage {s : Set M} : closure (((↑) : closure s → M) ⁻¹' s) = ⊤ :=
   eq_top_iff.2 fun x =>
     Subtype.recOn x fun x hx _ => by
@@ -887,7 +887,7 @@ theorem top_prod (s : Submonoid N) : (⊤ : Submonoid M).prod s = s.comap (Monoi
 #align submonoid.top_prod Submonoid.top_prod
 #align add_submonoid.top_prod AddSubmonoid.top_prod
 
-@[simp, to_additive top_prod_top]
+@[to_additive (attr := simp) top_prod_top]
 theorem top_prod_top : (⊤ : Submonoid M).prod (⊤ : Submonoid N) = ⊤ :=
   (top_prod _).trans <| comap_top _
 #align submonoid.top_prod_top Submonoid.top_prod_top
@@ -926,7 +926,7 @@ theorem map_inr (s : Submonoid N) : s.map (inr M N) = prod ⊥ s :=
 #align submonoid.map_inr Submonoid.map_inr
 #align add_submonoid.map_inr AddSubmonoid.map_inr
 
-@[simp, to_additive prod_bot_sup_bot_prod]
+@[to_additive (attr := simp) prod_bot_sup_bot_prod]
 theorem prod_bot_sup_bot_prod (s : Submonoid M) (t : Submonoid N) :
     (prod s ⊥) ⊔ (prod ⊥ t) = prod s t :=
   (le_antisymm (sup_le (prod_mono (le_refl s) bot_le) (prod_mono bot_le (le_refl t))))
@@ -957,7 +957,7 @@ theorem comap_equiv_eq_map_symm (f : N ≃* M) (K : Submonoid M) :
 #align submonoid.comap_equiv_eq_map_symm Submonoid.comap_equiv_eq_map_symm
 #align add_submonoid.comap_equiv_eq_map_symm AddSubmonoid.comap_equiv_eq_map_symm
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem map_equiv_top (f : M ≃* N) : (⊤ : Submonoid M).map f.toMonoidHom = ⊤ :=
   SetLike.coe_injective <| Set.image_univ.trans (Function.Surjective.range_eq f.surjective)
 #align submonoid.map_equiv_top Submonoid.map_equiv_top
@@ -1047,13 +1047,13 @@ def mrange (f : F) : Submonoid N :=
 #align monoid_hom.mrange MonoidHom.mrange
 #align add_monoid_hom.mrange AddMonoidHom.mrange
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem coe_mrange (f : F) : (mrange f : Set N) = Set.range f :=
   rfl
 #align monoid_hom.coe_mrange MonoidHom.coe_mrange
 #align add_monoid_hom.coe_mrange AddMonoidHom.coe_mrange
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem mem_mrange {f : F} {y : N} : y ∈ mrange f ↔ ∃ x, f x = y :=
   Iff.rfl
 #align monoid_hom.mem_mrange MonoidHom.mem_mrange
@@ -1112,14 +1112,14 @@ def restrict {N S : Type _} [MulOneClass N] [SetLike S M] [SubmonoidClass S M] (
 #align monoid_hom.restrict MonoidHom.restrict
 #align add_monoid_hom.restrict AddMonoidHom.restrict
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem restrict_apply {N S : Type _} [MulOneClass N] [SetLike S M] [SubmonoidClass S M]
     (f : M →* N) (s : S) (x : s) : f.restrict s x = f x :=
   rfl
 #align monoid_hom.restrict_apply MonoidHom.restrict_apply
 #align add_monoid_hom.restrict_apply AddMonoidHom.restrict_apply
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem restrict_mrange (f : M →* N) : mrange (f.restrict S) = S.map f := by
   simp [SetLike.ext_iff]
 #align monoid_hom.restrict_mrange MonoidHom.restrict_mrange
@@ -1144,7 +1144,7 @@ def mrangeRestrict {N} [MulOneClass N] (f : M →* N) : M →* (mrange f) :=
 #align monoid_hom.mrange_restrict MonoidHom.mrangeRestrict
 #align add_monoid_hom.mrangeRestrict AddMonoidHom.mrangeRestrict
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem coe_mrangeRestrict {N} [MulOneClass N] (f : M →* N) (x : M) :
     (f.mrangeRestrict x : N) = f x :=
   rfl
@@ -1191,13 +1191,13 @@ theorem comap_mker (g : N →* P) (f : M →* N) : g.mker.comap f = mker (comp g
 #align monoid_hom.comap_mker MonoidHom.comap_mker
 #align add_monoid_hom.comap_mker AddMonoidHom.comap_mker
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem comap_bot' (f : F) : (⊥ : Submonoid N).comap f = mker f :=
   rfl
 #align monoid_hom.comap_bot' MonoidHom.comap_bot'
 #align add_monoid_hom.comap_bot' AddMonoidHom.comap_bot'
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem restrict_mker (f : M →* N) : mker (f.restrict S) = f.mker.comap S.subtype :=
   rfl
 #align monoid_hom.restrict_mker MonoidHom.restrict_mker
@@ -1211,7 +1211,7 @@ theorem mrangeRestrict_mker (f : M →* N) : mker (mrangeRestrict f) = mker f :=
 #align monoid_hom.range_restrict_mker MonoidHom.mrangeRestrict_mker
 #align add_monoid_hom.range_restrict_mker AddMonoidHom.mrangeRestrict_mker
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem mker_one : mker (1 : M →* N) = ⊤ := by
   ext
   simp [mem_mker]
@@ -1233,14 +1233,14 @@ theorem mker_prod_map {M' : Type _} {N' : Type _} [MulOneClass M'] [MulOneClass
 #align monoid_hom.mker_prod_map MonoidHom.mker_prod_map
 #align add_monoid_hom.mker_prod_map AddMonoidHom.mker_prod_map
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem mker_inl : mker (inl M N) = ⊥ := by
   ext x
   simp [mem_mker]
 #align monoid_hom.mker_inl MonoidHom.mker_inl
 #align add_monoid_hom.mker_inl AddMonoidHom.mker_inl
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem mker_inr : mker (inr M N) = ⊥ := by
   ext x
   simp [mem_mker]
@@ -1308,13 +1308,13 @@ theorem mrange_inr' : mrange (inr M N) = comap (fst M N) ⊥ :=
 #align submonoid.mrange_inr' Submonoid.mrange_inr'
 #align add_submonoid.mrange_inr' AddSubmonoid.mrange_inr'
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem mrange_fst : mrange (fst M N) = ⊤ :=
   mrange_top_of_surjective (fst M N) <| @Prod.fst_surjective _ _ ⟨1⟩
 #align submonoid.mrange_fst Submonoid.mrange_fst
 #align add_submonoid.mrange_fst AddSubmonoid.mrange_fst
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem mrange_snd : mrange (snd M N) = ⊤ :=
   mrange_top_of_surjective (snd M N) <| @Prod.snd_surjective _ _ ⟨1⟩
 #align submonoid.mrange_snd Submonoid.mrange_snd
@@ -1333,7 +1333,7 @@ theorem prod_eq_top_iff {s : Submonoid M} {t : Submonoid N} : s.prod t = ⊤ ↔
 #align submonoid.prod_eq_top_iff Submonoid.prod_eq_top_iff
 #align add_submonoid.prod_eq_top_iff AddSubmonoid.prod_eq_top_iff
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem mrange_inl_sup_mrange_inr : mrange (inl M N) ⊔ mrange (inr M N) = ⊤ := by
   simp only [mrange_inl, mrange_inr, prod_bot_sup_bot_prod, top_prod_top]
 #align submonoid.mrange_inl_sup_mrange_inr Submonoid.mrange_inl_sup_mrange_inr
@@ -1347,7 +1347,7 @@ def inclusion {S T : Submonoid M} (h : S ≤ T) : S →* T :=
 #align submonoid.inclusion Submonoid.inclusion
 #align add_submonoid.inclusion AddSubmonoid.inclusion
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem range_subtype (s : Submonoid M) : mrange s.subtype = s :=
   SetLike.coe_injective <| (coe_mrange _).trans <| Subtype.range_coe
 #align submonoid.range_subtype Submonoid.range_subtype
feat: port GroupTheory.Submonoid.Operations (#1281)

Starting the port of this file; due to its size, help is appreciated!

Co-authored-by: Reid Barton <rwbarton@gmail.com>

Dependencies 2 + 91

92 files ported (97.9%)
48107 lines ported (99.7%)
Show graph

The unported dependencies are