group_theory.subsemigroup.operationsMathlib.GroupTheory.Subsemigroup.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)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -4,9 +4,9 @@ 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, Yakov Pechersky, Jireh Loreaux
 -/
-import Mathbin.GroupTheory.Subsemigroup.Basic
-import Mathbin.Algebra.Group.Prod
-import Mathbin.Algebra.Group.TypeTags
+import GroupTheory.Subsemigroup.Basic
+import Algebra.Group.Prod
+import Algebra.Group.TypeTags
 
 #align_import group_theory.subsemigroup.operations from "leanprover-community/mathlib"@"c3291da49cfa65f0d43b094750541c0731edc932"
 
Diff
@@ -86,10 +86,10 @@ def Subsemigroup.toAddSubsemigroup : Subsemigroup M ≃o AddSubsemigroup (Additi
     where
   toFun S :=
     { carrier := Additive.toMul ⁻¹' S
-      add_mem' := fun _ _ => S.mul_mem' }
+      add_mem' := fun _ _ => S.hMul_mem' }
   invFun S :=
     { carrier := Additive.ofMul ⁻¹' S
-      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
@@ -139,10 +139,10 @@ def AddSubsemigroup.toSubsemigroup : AddSubsemigroup A ≃o Subsemigroup (Multip
     where
   toFun S :=
     { carrier := Multiplicative.toAdd ⁻¹' S
-      mul_mem' := fun _ _ => S.add_mem' }
+      hMul_mem' := fun _ _ => S.add_mem' }
   invFun S :=
     { carrier := Multiplicative.ofAdd ⁻¹' S
-      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
@@ -198,7 +198,7 @@ variable [Mul M] [Mul N] [Mul P] (S : Subsemigroup M)
 def comap (f : M →ₙ* N) (S : Subsemigroup N) : Subsemigroup M
     where
   carrier := f ⁻¹' S
-  mul_mem' a b ha hb := show f (a * b) ∈ S by rw [map_mul] <;> exact mul_mem ha hb
+  hMul_mem' a b ha hb := show f (a * b) ∈ S by rw [map_mul] <;> exact mul_mem ha hb
 #align subsemigroup.comap Subsemigroup.comap
 #align add_subsemigroup.comap AddSubsemigroup.comap
 -/
@@ -243,7 +243,7 @@ theorem comap_id (S : Subsemigroup P) : S.comap (MulHom.id _) = S :=
 def map (f : M →ₙ* N) (S : Subsemigroup M) : Subsemigroup N
     where
   carrier := f '' S
-  mul_mem' := by
+  hMul_mem' := by
     rintro _ _ ⟨x, hx, rfl⟩ ⟨y, hy, rfl⟩
     exact ⟨x * y, @mul_mem (Subsemigroup M) M _ _ _ _ _ _ hx hy, by rw [map_mul] <;> rfl⟩
 #align subsemigroup.map Subsemigroup.map
@@ -632,7 +632,7 @@ variable {A : Type _} [Mul M] [SetLike A M] [hA : MulMemClass A M] (S' : A)
 /-- A submagma of a magma inherits a multiplication. -/
 @[to_additive "An additive submagma of an additive magma inherits an addition."]
 instance (priority := 900) mul : Mul S' :=
-  ⟨fun a b => ⟨a.1 * b.1, mul_mem a.2 b.2⟩⟩
+  ⟨fun a b => ⟨a.1 * b.1, hMul_mem a.2 b.2⟩⟩
 #align mul_mem_class.has_mul MulMemClass.mul
 #align add_mem_class.has_add AddMemClass.add
 -/
@@ -650,7 +650,7 @@ theorem coe_mul (x y : S') : (↑(x * y) : M) = ↑x * ↑y :=
 -- lower priority so later simp lemmas are used first; to appease simp_nf
 @[simp, to_additive]
 theorem mk_mul_mk (x y : M) (hx : x ∈ S') (hy : y ∈ S') :
-    (⟨x, hx⟩ : S') * ⟨y, hy⟩ = ⟨x * y, mul_mem hx hy⟩ :=
+    (⟨x, hx⟩ : S') * ⟨y, hy⟩ = ⟨x * y, hMul_mem hx hy⟩ :=
   rfl
 #align mul_mem_class.mk_mul_mk MulMemClass.mk_mul_mk
 #align add_mem_class.mk_add_mk AddMemClass.mk_add_mk
@@ -658,7 +658,7 @@ theorem mk_mul_mk (x y : M) (hx : x ∈ S') (hy : y ∈ S') :
 
 #print MulMemClass.mul_def /-
 @[to_additive]
-theorem mul_def (x y : S') : x * y = ⟨x * y, mul_mem x.2 y.2⟩ :=
+theorem mul_def (x y : S') : x * y = ⟨x * y, hMul_mem x.2 y.2⟩ :=
   rfl
 #align mul_mem_class.mul_def MulMemClass.mul_def
 #align add_mem_class.add_def AddMemClass.add_def
@@ -770,7 +770,7 @@ of `M × N`. -/
 def prod (s : Subsemigroup M) (t : Subsemigroup N) : Subsemigroup (M × N)
     where
   carrier := s ×ˢ t
-  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 subsemigroup.prod Subsemigroup.prod
 #align add_subsemigroup.prod AddSubsemigroup.prod
 -/
Diff
@@ -3,16 +3,13 @@ Copyright (c) 2022 Yakov Pechersky. 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, Yakov Pechersky, Jireh Loreaux
-
-! This file was ported from Lean 3 source module group_theory.subsemigroup.operations
-! leanprover-community/mathlib commit c3291da49cfa65f0d43b094750541c0731edc932
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.GroupTheory.Subsemigroup.Basic
 import Mathbin.Algebra.Group.Prod
 import Mathbin.Algebra.Group.TypeTags
 
+#align_import group_theory.subsemigroup.operations from "leanprover-community/mathlib"@"c3291da49cfa65f0d43b094750541c0731edc932"
+
 /-!
 # Operations on `subsemigroup`s
 
Diff
@@ -82,6 +82,7 @@ section
 
 variable [Mul M]
 
+#print Subsemigroup.toAddSubsemigroup /-
 /-- Subsemigroups of semigroup `M` are isomorphic to additive subsemigroups of `additive M`. -/
 @[simps]
 def Subsemigroup.toAddSubsemigroup : Subsemigroup M ≃o AddSubsemigroup (Additive M)
@@ -96,13 +97,17 @@ def Subsemigroup.toAddSubsemigroup : Subsemigroup M ≃o AddSubsemigroup (Additi
   right_inv x := by cases x <;> rfl
   map_rel_iff' a b := Iff.rfl
 #align subsemigroup.to_add_subsemigroup Subsemigroup.toAddSubsemigroup
+-/
 
+#print AddSubsemigroup.toSubsemigroup' /-
 /-- Additive subsemigroups of an additive semigroup `additive M` are isomorphic to subsemigroups
 of `M`. -/
 abbrev AddSubsemigroup.toSubsemigroup' : AddSubsemigroup (Additive M) ≃o Subsemigroup M :=
   Subsemigroup.toAddSubsemigroup.symm
 #align add_subsemigroup.to_subsemigroup' AddSubsemigroup.toSubsemigroup'
+-/
 
+#print Subsemigroup.toAddSubsemigroup_closure /-
 theorem Subsemigroup.toAddSubsemigroup_closure (S : Set M) :
     (Subsemigroup.closure S).toAddSubsemigroup = AddSubsemigroup.closure (Additive.toMul ⁻¹' S) :=
   le_antisymm
@@ -110,7 +115,9 @@ theorem Subsemigroup.toAddSubsemigroup_closure (S : Set M) :
       Subsemigroup.closure_le.2 AddSubsemigroup.subset_closure)
     (AddSubsemigroup.closure_le.2 Subsemigroup.subset_closure)
 #align subsemigroup.to_add_subsemigroup_closure Subsemigroup.toAddSubsemigroup_closure
+-/
 
+#print AddSubsemigroup.toSubsemigroup'_closure /-
 theorem AddSubsemigroup.toSubsemigroup'_closure (S : Set (Additive M)) :
     (AddSubsemigroup.closure S).toSubsemigroup' =
       Subsemigroup.closure (Multiplicative.ofAdd ⁻¹' S) :=
@@ -119,6 +126,7 @@ theorem AddSubsemigroup.toSubsemigroup'_closure (S : Set (Additive M)) :
       AddSubsemigroup.closure_le.2 Subsemigroup.subset_closure)
     (Subsemigroup.closure_le.2 AddSubsemigroup.subset_closure)
 #align add_subsemigroup.to_subsemigroup'_closure AddSubsemigroup.toSubsemigroup'_closure
+-/
 
 end
 
@@ -126,6 +134,7 @@ section
 
 variable {A : Type _} [Add A]
 
+#print AddSubsemigroup.toSubsemigroup /-
 /-- Additive subsemigroups of an additive semigroup `A` are isomorphic to
 multiplicative subsemigroups of `multiplicative A`. -/
 @[simps]
@@ -141,13 +150,17 @@ def AddSubsemigroup.toSubsemigroup : AddSubsemigroup A ≃o Subsemigroup (Multip
   right_inv x := by cases x <;> rfl
   map_rel_iff' a b := Iff.rfl
 #align add_subsemigroup.to_subsemigroup AddSubsemigroup.toSubsemigroup
+-/
 
+#print Subsemigroup.toAddSubsemigroup' /-
 /-- Subsemigroups of a semigroup `multiplicative A` are isomorphic to additive subsemigroups
 of `A`. -/
 abbrev Subsemigroup.toAddSubsemigroup' : Subsemigroup (Multiplicative A) ≃o AddSubsemigroup A :=
   AddSubsemigroup.toSubsemigroup.symm
 #align subsemigroup.to_add_subsemigroup' Subsemigroup.toAddSubsemigroup'
+-/
 
+#print AddSubsemigroup.toSubsemigroup_closure /-
 theorem AddSubsemigroup.toSubsemigroup_closure (S : Set A) :
     (AddSubsemigroup.closure S).toSubsemigroup =
       Subsemigroup.closure (Multiplicative.toAdd ⁻¹' S) :=
@@ -156,7 +169,9 @@ theorem AddSubsemigroup.toSubsemigroup_closure (S : Set A) :
       AddSubsemigroup.closure_le.2 Subsemigroup.subset_closure)
     (Subsemigroup.closure_le.2 AddSubsemigroup.subset_closure)
 #align add_subsemigroup.to_subsemigroup_closure AddSubsemigroup.toSubsemigroup_closure
+-/
 
+#print Subsemigroup.toAddSubsemigroup'_closure /-
 theorem Subsemigroup.toAddSubsemigroup'_closure (S : Set (Multiplicative A)) :
     (Subsemigroup.closure S).toAddSubsemigroup' = AddSubsemigroup.closure (Additive.ofMul ⁻¹' S) :=
   le_antisymm
@@ -164,6 +179,7 @@ theorem Subsemigroup.toAddSubsemigroup'_closure (S : Set (Multiplicative A)) :
       Subsemigroup.closure_le.2 AddSubsemigroup.subset_closure)
     (AddSubsemigroup.closure_le.2 Subsemigroup.subset_closure)
 #align subsemigroup.to_add_subsemigroup'_closure Subsemigroup.toAddSubsemigroup'_closure
+-/
 
 end
 
@@ -237,97 +253,127 @@ def map (f : M →ₙ* N) (S : Subsemigroup M) : Subsemigroup N
 #align add_subsemigroup.map AddSubsemigroup.map
 -/
 
+#print Subsemigroup.coe_map /-
 @[simp, to_additive]
 theorem coe_map (f : M →ₙ* N) (S : Subsemigroup M) : (S.map f : Set N) = f '' S :=
   rfl
 #align subsemigroup.coe_map Subsemigroup.coe_map
 #align add_subsemigroup.coe_map AddSubsemigroup.coe_map
+-/
 
+#print Subsemigroup.mem_map /-
 @[simp, to_additive]
 theorem mem_map {f : M →ₙ* N} {S : Subsemigroup M} {y : N} : y ∈ S.map f ↔ ∃ x ∈ S, f x = y :=
   mem_image_iff_bex
 #align subsemigroup.mem_map Subsemigroup.mem_map
 #align add_subsemigroup.mem_map AddSubsemigroup.mem_map
+-/
 
+#print Subsemigroup.mem_map_of_mem /-
 @[to_additive]
 theorem mem_map_of_mem (f : M →ₙ* N) {S : Subsemigroup M} {x : M} (hx : x ∈ S) : f x ∈ S.map f :=
   mem_image_of_mem f hx
 #align subsemigroup.mem_map_of_mem Subsemigroup.mem_map_of_mem
 #align add_subsemigroup.mem_map_of_mem AddSubsemigroup.mem_map_of_mem
+-/
 
+#print Subsemigroup.apply_coe_mem_map /-
 @[to_additive]
 theorem apply_coe_mem_map (f : M →ₙ* N) (S : Subsemigroup M) (x : S) : f x ∈ S.map f :=
   mem_map_of_mem f x.Prop
 #align subsemigroup.apply_coe_mem_map Subsemigroup.apply_coe_mem_map
 #align add_subsemigroup.apply_coe_mem_map AddSubsemigroup.apply_coe_mem_map
+-/
 
+#print Subsemigroup.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 subsemigroup.map_map Subsemigroup.map_map
 #align add_subsemigroup.map_map AddSubsemigroup.map_map
+-/
 
+#print Subsemigroup.mem_map_iff_mem /-
 @[to_additive]
 theorem mem_map_iff_mem {f : M →ₙ* N} (hf : Function.Injective f) {S : Subsemigroup M} {x : M} :
     f x ∈ S.map f ↔ x ∈ S :=
   hf.mem_set_image
 #align subsemigroup.mem_map_iff_mem Subsemigroup.mem_map_iff_mem
 #align add_subsemigroup.mem_map_iff_mem AddSubsemigroup.mem_map_iff_mem
+-/
 
+#print Subsemigroup.map_le_iff_le_comap /-
 @[to_additive]
 theorem map_le_iff_le_comap {f : M →ₙ* N} {S : Subsemigroup M} {T : Subsemigroup N} :
     S.map f ≤ T ↔ S ≤ T.comap f :=
   image_subset_iff
 #align subsemigroup.map_le_iff_le_comap Subsemigroup.map_le_iff_le_comap
 #align add_subsemigroup.map_le_iff_le_comap AddSubsemigroup.map_le_iff_le_comap
+-/
 
+#print Subsemigroup.gc_map_comap /-
 @[to_additive]
 theorem gc_map_comap (f : M →ₙ* N) : GaloisConnection (map f) (comap f) := fun S T =>
   map_le_iff_le_comap
 #align subsemigroup.gc_map_comap Subsemigroup.gc_map_comap
 #align add_subsemigroup.gc_map_comap AddSubsemigroup.gc_map_comap
+-/
 
+#print Subsemigroup.map_le_of_le_comap /-
 @[to_additive]
 theorem map_le_of_le_comap {T : Subsemigroup N} {f : M →ₙ* N} : S ≤ T.comap f → S.map f ≤ T :=
   (gc_map_comap f).l_le
 #align subsemigroup.map_le_of_le_comap Subsemigroup.map_le_of_le_comap
 #align add_subsemigroup.map_le_of_le_comap AddSubsemigroup.map_le_of_le_comap
+-/
 
+#print Subsemigroup.le_comap_of_map_le /-
 @[to_additive]
 theorem le_comap_of_map_le {T : Subsemigroup N} {f : M →ₙ* N} : S.map f ≤ T → S ≤ T.comap f :=
   (gc_map_comap f).le_u
 #align subsemigroup.le_comap_of_map_le Subsemigroup.le_comap_of_map_le
 #align add_subsemigroup.le_comap_of_map_le AddSubsemigroup.le_comap_of_map_le
+-/
 
+#print Subsemigroup.le_comap_map /-
 @[to_additive]
 theorem le_comap_map {f : M →ₙ* N} : S ≤ (S.map f).comap f :=
   (gc_map_comap f).le_u_l _
 #align subsemigroup.le_comap_map Subsemigroup.le_comap_map
 #align add_subsemigroup.le_comap_map AddSubsemigroup.le_comap_map
+-/
 
+#print Subsemigroup.map_comap_le /-
 @[to_additive]
 theorem map_comap_le {S : Subsemigroup N} {f : M →ₙ* N} : (S.comap f).map f ≤ S :=
   (gc_map_comap f).l_u_le _
 #align subsemigroup.map_comap_le Subsemigroup.map_comap_le
 #align add_subsemigroup.map_comap_le AddSubsemigroup.map_comap_le
+-/
 
+#print Subsemigroup.monotone_map /-
 @[to_additive]
 theorem monotone_map {f : M →ₙ* N} : Monotone (map f) :=
   (gc_map_comap f).monotone_l
 #align subsemigroup.monotone_map Subsemigroup.monotone_map
 #align add_subsemigroup.monotone_map AddSubsemigroup.monotone_map
+-/
 
+#print Subsemigroup.monotone_comap /-
 @[to_additive]
 theorem monotone_comap {f : M →ₙ* N} : Monotone (comap f) :=
   (gc_map_comap f).monotone_u
 #align subsemigroup.monotone_comap Subsemigroup.monotone_comap
 #align add_subsemigroup.monotone_comap AddSubsemigroup.monotone_comap
+-/
 
+#print Subsemigroup.map_comap_map /-
 @[simp, to_additive]
 theorem map_comap_map {f : M →ₙ* N} : ((S.map f).comap f).map f = S.map f :=
   (gc_map_comap f).l_u_l_eq_l _
 #align subsemigroup.map_comap_map Subsemigroup.map_comap_map
 #align add_subsemigroup.map_comap_map AddSubsemigroup.map_comap_map
+-/
 
 #print Subsemigroup.comap_map_comap /-
 @[simp, to_additive]
@@ -338,43 +384,55 @@ theorem comap_map_comap {S : Subsemigroup N} {f : M →ₙ* N} :
 #align add_subsemigroup.comap_map_comap AddSubsemigroup.comap_map_comap
 -/
 
+#print Subsemigroup.map_sup /-
 @[to_additive]
 theorem map_sup (S T : Subsemigroup M) (f : M →ₙ* N) : (S ⊔ T).map f = S.map f ⊔ T.map f :=
   (gc_map_comap f).l_sup
 #align subsemigroup.map_sup Subsemigroup.map_sup
 #align add_subsemigroup.map_sup AddSubsemigroup.map_sup
+-/
 
+#print Subsemigroup.map_iSup /-
 @[to_additive]
 theorem map_iSup {ι : Sort _} (f : M →ₙ* N) (s : ι → Subsemigroup M) :
     (iSup s).map f = ⨆ i, (s i).map f :=
   (gc_map_comap f).l_iSup
 #align subsemigroup.map_supr Subsemigroup.map_iSup
 #align add_subsemigroup.map_supr AddSubsemigroup.map_iSup
+-/
 
+#print Subsemigroup.comap_inf /-
 @[to_additive]
 theorem comap_inf (S T : Subsemigroup N) (f : M →ₙ* N) : (S ⊓ T).comap f = S.comap f ⊓ T.comap f :=
   (gc_map_comap f).u_inf
 #align subsemigroup.comap_inf Subsemigroup.comap_inf
 #align add_subsemigroup.comap_inf AddSubsemigroup.comap_inf
+-/
 
+#print Subsemigroup.comap_iInf /-
 @[to_additive]
 theorem comap_iInf {ι : Sort _} (f : M →ₙ* N) (s : ι → Subsemigroup N) :
     (iInf s).comap f = ⨅ i, (s i).comap f :=
   (gc_map_comap f).u_iInf
 #align subsemigroup.comap_infi Subsemigroup.comap_iInf
 #align add_subsemigroup.comap_infi AddSubsemigroup.comap_iInf
+-/
 
+#print Subsemigroup.map_bot /-
 @[simp, to_additive]
 theorem map_bot (f : M →ₙ* N) : (⊥ : Subsemigroup M).map f = ⊥ :=
   (gc_map_comap f).l_bot
 #align subsemigroup.map_bot Subsemigroup.map_bot
 #align add_subsemigroup.map_bot AddSubsemigroup.map_bot
+-/
 
+#print Subsemigroup.comap_top /-
 @[simp, to_additive]
 theorem comap_top (f : M →ₙ* N) : (⊤ : Subsemigroup N).comap f = ⊤ :=
   (gc_map_comap f).u_top
 #align subsemigroup.comap_top Subsemigroup.comap_top
 #align add_subsemigroup.comap_top AddSubsemigroup.comap_top
+-/
 
 #print Subsemigroup.map_id /-
 @[simp, to_additive]
@@ -388,20 +446,22 @@ section GaloisCoinsertion
 
 variable {ι : Type _} {f : M →ₙ* N} (hf : Function.Injective f)
 
-include hf
-
+#print Subsemigroup.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 subsemigroup.gci_map_comap Subsemigroup.gciMapComap
 #align add_subsemigroup.gci_map_comap AddSubsemigroup.gciMapComap
+-/
 
+#print Subsemigroup.comap_map_eq_of_injective /-
 @[to_additive]
 theorem comap_map_eq_of_injective (S : Subsemigroup M) : (S.map f).comap f = S :=
   (gciMapComap hf).u_l_eq _
 #align subsemigroup.comap_map_eq_of_injective Subsemigroup.comap_map_eq_of_injective
 #align add_subsemigroup.comap_map_eq_of_injective AddSubsemigroup.comap_map_eq_of_injective
+-/
 
 #print Subsemigroup.comap_surjective_of_injective /-
 @[to_additive]
@@ -411,49 +471,63 @@ theorem comap_surjective_of_injective : Function.Surjective (comap f) :=
 #align add_subsemigroup.comap_surjective_of_injective AddSubsemigroup.comap_surjective_of_injective
 -/
 
+#print Subsemigroup.map_injective_of_injective /-
 @[to_additive]
 theorem map_injective_of_injective : Function.Injective (map f) :=
   (gciMapComap hf).l_injective
 #align subsemigroup.map_injective_of_injective Subsemigroup.map_injective_of_injective
 #align add_subsemigroup.map_injective_of_injective AddSubsemigroup.map_injective_of_injective
+-/
 
+#print Subsemigroup.comap_inf_map_of_injective /-
 @[to_additive]
 theorem comap_inf_map_of_injective (S T : Subsemigroup M) : (S.map f ⊓ T.map f).comap f = S ⊓ T :=
   (gciMapComap hf).u_inf_l _ _
 #align subsemigroup.comap_inf_map_of_injective Subsemigroup.comap_inf_map_of_injective
 #align add_subsemigroup.comap_inf_map_of_injective AddSubsemigroup.comap_inf_map_of_injective
+-/
 
+#print Subsemigroup.comap_iInf_map_of_injective /-
 @[to_additive]
 theorem comap_iInf_map_of_injective (S : ι → Subsemigroup M) :
     (⨅ i, (S i).map f).comap f = iInf S :=
   (gciMapComap hf).u_iInf_l _
 #align subsemigroup.comap_infi_map_of_injective Subsemigroup.comap_iInf_map_of_injective
 #align add_subsemigroup.comap_infi_map_of_injective AddSubsemigroup.comap_iInf_map_of_injective
+-/
 
+#print Subsemigroup.comap_sup_map_of_injective /-
 @[to_additive]
 theorem comap_sup_map_of_injective (S T : Subsemigroup M) : (S.map f ⊔ T.map f).comap f = S ⊔ T :=
   (gciMapComap hf).u_sup_l _ _
 #align subsemigroup.comap_sup_map_of_injective Subsemigroup.comap_sup_map_of_injective
 #align add_subsemigroup.comap_sup_map_of_injective AddSubsemigroup.comap_sup_map_of_injective
+-/
 
+#print Subsemigroup.comap_iSup_map_of_injective /-
 @[to_additive]
 theorem comap_iSup_map_of_injective (S : ι → Subsemigroup M) :
     (⨆ i, (S i).map f).comap f = iSup S :=
   (gciMapComap hf).u_iSup_l _
 #align subsemigroup.comap_supr_map_of_injective Subsemigroup.comap_iSup_map_of_injective
 #align add_subsemigroup.comap_supr_map_of_injective AddSubsemigroup.comap_iSup_map_of_injective
+-/
 
+#print Subsemigroup.map_le_map_iff_of_injective /-
 @[to_additive]
 theorem map_le_map_iff_of_injective {S T : Subsemigroup M} : S.map f ≤ T.map f ↔ S ≤ T :=
   (gciMapComap hf).l_le_l_iff
 #align subsemigroup.map_le_map_iff_of_injective Subsemigroup.map_le_map_iff_of_injective
 #align add_subsemigroup.map_le_map_iff_of_injective AddSubsemigroup.map_le_map_iff_of_injective
+-/
 
+#print Subsemigroup.map_strictMono_of_injective /-
 @[to_additive]
 theorem map_strictMono_of_injective : StrictMono (map f) :=
   (gciMapComap hf).strictMono_l
 #align subsemigroup.map_strict_mono_of_injective Subsemigroup.map_strictMono_of_injective
 #align add_subsemigroup.map_strict_mono_of_injective AddSubsemigroup.map_strictMono_of_injective
+-/
 
 end GaloisCoinsertion
 
@@ -461,8 +535,7 @@ section GaloisInsertion
 
 variable {ι : Type _} {f : M →ₙ* N} (hf : Function.Surjective f)
 
-include hf
-
+#print Subsemigroup.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) :=
@@ -471,6 +544,7 @@ def giMapComap : GaloisInsertion (map f) (comap f) :=
     mem_map.2 ⟨y, by simp [hy, h]⟩
 #align subsemigroup.gi_map_comap Subsemigroup.giMapComap
 #align add_subsemigroup.gi_map_comap AddSubsemigroup.giMapComap
+-/
 
 #print Subsemigroup.map_comap_eq_of_surjective /-
 @[to_additive]
@@ -480,11 +554,13 @@ theorem map_comap_eq_of_surjective (S : Subsemigroup N) : (S.comap f).map f = S
 #align add_subsemigroup.map_comap_eq_of_surjective AddSubsemigroup.map_comap_eq_of_surjective
 -/
 
+#print Subsemigroup.map_surjective_of_surjective /-
 @[to_additive]
 theorem map_surjective_of_surjective : Function.Surjective (map f) :=
   (giMapComap hf).l_surjective
 #align subsemigroup.map_surjective_of_surjective Subsemigroup.map_surjective_of_surjective
 #align add_subsemigroup.map_surjective_of_surjective AddSubsemigroup.map_surjective_of_surjective
+-/
 
 #print Subsemigroup.comap_injective_of_surjective /-
 @[to_additive]
@@ -494,45 +570,57 @@ theorem comap_injective_of_surjective : Function.Injective (comap f) :=
 #align add_subsemigroup.comap_injective_of_surjective AddSubsemigroup.comap_injective_of_surjective
 -/
 
+#print Subsemigroup.map_inf_comap_of_surjective /-
 @[to_additive]
 theorem map_inf_comap_of_surjective (S T : Subsemigroup N) :
     (S.comap f ⊓ T.comap f).map f = S ⊓ T :=
   (giMapComap hf).l_inf_u _ _
 #align subsemigroup.map_inf_comap_of_surjective Subsemigroup.map_inf_comap_of_surjective
 #align add_subsemigroup.map_inf_comap_of_surjective AddSubsemigroup.map_inf_comap_of_surjective
+-/
 
+#print Subsemigroup.map_iInf_comap_of_surjective /-
 @[to_additive]
 theorem map_iInf_comap_of_surjective (S : ι → Subsemigroup N) :
     (⨅ i, (S i).comap f).map f = iInf S :=
   (giMapComap hf).l_iInf_u _
 #align subsemigroup.map_infi_comap_of_surjective Subsemigroup.map_iInf_comap_of_surjective
 #align add_subsemigroup.map_infi_comap_of_surjective AddSubsemigroup.map_iInf_comap_of_surjective
+-/
 
+#print Subsemigroup.map_sup_comap_of_surjective /-
 @[to_additive]
 theorem map_sup_comap_of_surjective (S T : Subsemigroup N) :
     (S.comap f ⊔ T.comap f).map f = S ⊔ T :=
   (giMapComap hf).l_sup_u _ _
 #align subsemigroup.map_sup_comap_of_surjective Subsemigroup.map_sup_comap_of_surjective
 #align add_subsemigroup.map_sup_comap_of_surjective AddSubsemigroup.map_sup_comap_of_surjective
+-/
 
+#print Subsemigroup.map_iSup_comap_of_surjective /-
 @[to_additive]
 theorem map_iSup_comap_of_surjective (S : ι → Subsemigroup N) :
     (⨆ i, (S i).comap f).map f = iSup S :=
   (giMapComap hf).l_iSup_u _
 #align subsemigroup.map_supr_comap_of_surjective Subsemigroup.map_iSup_comap_of_surjective
 #align add_subsemigroup.map_supr_comap_of_surjective AddSubsemigroup.map_iSup_comap_of_surjective
+-/
 
+#print Subsemigroup.comap_le_comap_iff_of_surjective /-
 @[to_additive]
 theorem comap_le_comap_iff_of_surjective {S T : Subsemigroup N} : S.comap f ≤ T.comap f ↔ S ≤ T :=
   (giMapComap hf).u_le_u_iff
 #align subsemigroup.comap_le_comap_iff_of_surjective Subsemigroup.comap_le_comap_iff_of_surjective
 #align add_subsemigroup.comap_le_comap_iff_of_surjective AddSubsemigroup.comap_le_comap_iff_of_surjective
+-/
 
+#print Subsemigroup.comap_strictMono_of_surjective /-
 @[to_additive]
 theorem comap_strictMono_of_surjective : StrictMono (comap f) :=
   (giMapComap hf).strictMono_u
 #align subsemigroup.comap_strict_mono_of_surjective Subsemigroup.comap_strictMono_of_surjective
 #align add_subsemigroup.comap_strict_mono_of_surjective AddSubsemigroup.comap_strictMono_of_surjective
+-/
 
 end GaloisInsertion
 
@@ -542,8 +630,6 @@ namespace MulMemClass
 
 variable {A : Type _} [Mul M] [SetLike A M] [hA : MulMemClass A M] (S' : A)
 
-include hA
-
 #print MulMemClass.mul /-
 -- lower priority so other instances are found first
 /-- A submagma of a magma inherits a multiplication. -/
@@ -554,13 +640,16 @@ instance (priority := 900) mul : Mul S' :=
 #align add_mem_class.has_add AddMemClass.add
 -/
 
+#print MulMemClass.coe_mul /-
 -- lower priority so later simp lemmas are used first; to appease simp_nf
 @[simp, norm_cast, to_additive]
 theorem coe_mul (x y : S') : (↑(x * y) : M) = ↑x * ↑y :=
   rfl
 #align mul_mem_class.coe_mul MulMemClass.coe_mul
 #align add_mem_class.coe_add AddMemClass.coe_add
+-/
 
+#print MulMemClass.mk_mul_mk /-
 -- lower priority so later simp lemmas are used first; to appease simp_nf
 @[simp, to_additive]
 theorem mk_mul_mk (x y : M) (hx : x ∈ S') (hy : y ∈ S') :
@@ -568,15 +657,17 @@ theorem mk_mul_mk (x y : M) (hx : x ∈ S') (hy : y ∈ S') :
   rfl
 #align mul_mem_class.mk_mul_mk MulMemClass.mk_mul_mk
 #align add_mem_class.mk_add_mk AddMemClass.mk_add_mk
+-/
 
+#print MulMemClass.mul_def /-
 @[to_additive]
 theorem mul_def (x y : S') : x * y = ⟨x * y, mul_mem x.2 y.2⟩ :=
   rfl
 #align mul_mem_class.mul_def MulMemClass.mul_def
 #align add_mem_class.add_def AddMemClass.add_def
+-/
 
-omit hA
-
+#print MulMemClass.toSemigroup /-
 /-- A subsemigroup of a semigroup inherits a semigroup structure. -/
 @[to_additive "An `add_subsemigroup` of an `add_semigroup` inherits an `add_semigroup` structure."]
 instance toSemigroup {M : Type _} [Semigroup M] {A : Type _} [SetLike A M] [MulMemClass A M]
@@ -584,7 +675,9 @@ instance toSemigroup {M : Type _} [Semigroup M] {A : Type _} [SetLike A M] [MulM
   Subtype.coe_injective.Semigroup coe fun _ _ => rfl
 #align mul_mem_class.to_semigroup MulMemClass.toSemigroup
 #align add_mem_class.to_add_semigroup AddMemClass.toAddSemigroup
+-/
 
+#print MulMemClass.toCommSemigroup /-
 /-- A subsemigroup of a `comm_semigroup` is a `comm_semigroup`. -/
 @[to_additive "An `add_subsemigroup` of an `add_comm_semigroup` is an `add_comm_semigroup`."]
 instance toCommSemigroup {M} [CommSemigroup M] {A : Type _} [SetLike A M] [MulMemClass A M]
@@ -592,8 +685,7 @@ instance toCommSemigroup {M} [CommSemigroup M] {A : Type _} [SetLike A M] [MulMe
   Subtype.coe_injective.CommSemigroup coe fun _ _ => rfl
 #align mul_mem_class.to_comm_semigroup MulMemClass.toCommSemigroup
 #align add_mem_class.to_add_comm_semigroup AddMemClass.toAddCommSemigroup
-
-include hA
+-/
 
 #print MulMemClass.subtype /-
 /-- The natural semigroup hom from a subsemigroup of semigroup `M` to `M`. -/
@@ -604,11 +696,13 @@ def subtype : S' →ₙ* M :=
 #align add_mem_class.subtype AddMemClass.subtype
 -/
 
+#print MulMemClass.coe_subtype /-
 @[simp, to_additive]
 theorem coe_subtype : (MulMemClass.subtype S' : S' → M) = coe :=
   rfl
 #align mul_mem_class.coe_subtype MulMemClass.coe_subtype
 #align add_mem_class.coe_subtype AddMemClass.coe_subtype
+-/
 
 end MulMemClass
 
@@ -648,12 +742,14 @@ noncomputable def equivMapOfInjective (f : M →ₙ* N) (hf : Function.Injective
 #align add_subsemigroup.equiv_map_of_injective AddSubsemigroup.equivMapOfInjective
 -/
 
+#print Subsemigroup.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 subsemigroup.coe_equiv_map_of_injective_apply Subsemigroup.coe_equivMapOfInjective_apply
 #align add_subsemigroup.coe_equiv_map_of_injective_apply AddSubsemigroup.coe_equivMapOfInjective_apply
+-/
 
 #print Subsemigroup.closure_closure_coe_preimage /-
 @[simp, to_additive]
@@ -683,31 +779,39 @@ def prod (s : Subsemigroup M) (t : Subsemigroup N) : Subsemigroup (M × N)
 -/
 
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print Subsemigroup.coe_prod /-
 @[to_additive coe_prod]
 theorem coe_prod (s : Subsemigroup M) (t : Subsemigroup N) : (s.Prod t : Set (M × N)) = s ×ˢ t :=
   rfl
 #align subsemigroup.coe_prod Subsemigroup.coe_prod
 #align add_subsemigroup.coe_prod AddSubsemigroup.coe_prod
+-/
 
+#print Subsemigroup.mem_prod /-
 @[to_additive mem_prod]
 theorem mem_prod {s : Subsemigroup M} {t : Subsemigroup N} {p : M × N} :
     p ∈ s.Prod t ↔ p.1 ∈ s ∧ p.2 ∈ t :=
   Iff.rfl
 #align subsemigroup.mem_prod Subsemigroup.mem_prod
 #align add_subsemigroup.mem_prod AddSubsemigroup.mem_prod
+-/
 
+#print Subsemigroup.prod_mono /-
 @[to_additive prod_mono]
 theorem prod_mono {s₁ s₂ : Subsemigroup M} {t₁ t₂ : Subsemigroup N} (hs : s₁ ≤ s₂) (ht : t₁ ≤ t₂) :
     s₁.Prod t₁ ≤ s₂.Prod t₂ :=
   Set.prod_mono hs ht
 #align subsemigroup.prod_mono Subsemigroup.prod_mono
 #align add_subsemigroup.prod_mono AddSubsemigroup.prod_mono
+-/
 
+#print Subsemigroup.prod_top /-
 @[to_additive prod_top]
 theorem prod_top (s : Subsemigroup M) : s.Prod (⊤ : Subsemigroup N) = s.comap (MulHom.fst M N) :=
   ext fun x => by simp [mem_prod, MulHom.coe_fst]
 #align subsemigroup.prod_top Subsemigroup.prod_top
 #align add_subsemigroup.prod_top AddSubsemigroup.prod_top
+-/
 
 #print Subsemigroup.top_prod /-
 @[to_additive top_prod]
@@ -717,17 +821,21 @@ theorem top_prod (s : Subsemigroup N) : (⊤ : Subsemigroup M).Prod s = s.comap
 #align add_subsemigroup.top_prod AddSubsemigroup.top_prod
 -/
 
+#print Subsemigroup.top_prod_top /-
 @[simp, to_additive top_prod_top]
 theorem top_prod_top : (⊤ : Subsemigroup M).Prod (⊤ : Subsemigroup N) = ⊤ :=
   (top_prod _).trans <| comap_top _
 #align subsemigroup.top_prod_top Subsemigroup.top_prod_top
 #align add_subsemigroup.top_prod_top AddSubsemigroup.top_prod_top
+-/
 
+#print Subsemigroup.bot_prod_bot /-
 @[to_additive]
 theorem bot_prod_bot : (⊥ : Subsemigroup M).Prod (⊥ : Subsemigroup N) = ⊥ :=
   SetLike.coe_injective <| by simp [coe_prod, Prod.one_eq_mk]
 #align subsemigroup.bot_prod_bot Subsemigroup.bot_prod_bot
 #align add_subsemigroup.bot_sum_bot AddSubsemigroup.bot_prod_bot
+-/
 
 #print Subsemigroup.prodEquiv /-
 /-- The product of subsemigroups is isomorphic to their product as semigroups. -/
@@ -741,19 +849,23 @@ def prodEquiv (s : Subsemigroup M) (t : Subsemigroup N) : s.Prod t ≃* s × t :
 
 open MulHom
 
+#print Subsemigroup.mem_map_equiv /-
 @[to_additive]
 theorem mem_map_equiv {f : M ≃* N} {K : Subsemigroup M} {x : N} :
     x ∈ K.map f.toMulHom ↔ f.symm x ∈ K :=
   @Set.mem_image_equiv _ _ (↑K) f.toEquiv x
 #align subsemigroup.mem_map_equiv Subsemigroup.mem_map_equiv
 #align add_subsemigroup.mem_map_equiv AddSubsemigroup.mem_map_equiv
+-/
 
+#print Subsemigroup.map_equiv_eq_comap_symm /-
 @[to_additive]
 theorem map_equiv_eq_comap_symm (f : M ≃* N) (K : Subsemigroup M) :
     K.map f.toMulHom = K.comap f.symm.toMulHom :=
   SetLike.coe_injective (f.toEquiv.image_eq_preimage K)
 #align subsemigroup.map_equiv_eq_comap_symm Subsemigroup.map_equiv_eq_comap_symm
 #align add_subsemigroup.map_equiv_eq_comap_symm AddSubsemigroup.map_equiv_eq_comap_symm
+-/
 
 #print Subsemigroup.comap_equiv_eq_map_symm /-
 @[to_additive]
@@ -764,12 +876,15 @@ theorem comap_equiv_eq_map_symm (f : N ≃* M) (K : Subsemigroup M) :
 #align add_subsemigroup.comap_equiv_eq_map_symm AddSubsemigroup.comap_equiv_eq_map_symm
 -/
 
+#print Subsemigroup.map_equiv_top /-
 @[simp, to_additive]
 theorem map_equiv_top (f : M ≃* N) : (⊤ : Subsemigroup M).map f.toMulHom = ⊤ :=
   SetLike.coe_injective <| Set.image_univ.trans f.Surjective.range_eq
 #align subsemigroup.map_equiv_top Subsemigroup.map_equiv_top
 #align add_subsemigroup.map_equiv_top AddSubsemigroup.map_equiv_top
+-/
 
+#print Subsemigroup.le_prod_iff /-
 @[to_additive le_prod_iff]
 theorem le_prod_iff {s : Subsemigroup M} {t : Subsemigroup N} {u : Subsemigroup (M × N)} :
     u ≤ s.Prod t ↔ u.map (fst M N) ≤ s ∧ u.map (snd M N) ≤ t :=
@@ -782,6 +897,7 @@ theorem le_prod_iff {s : Subsemigroup M} {t : Subsemigroup N} {u : Subsemigroup
   · rintro ⟨hH, hK⟩ ⟨x1, x2⟩ h; exact ⟨hH ⟨_, h, rfl⟩, hK ⟨_, h, rfl⟩⟩
 #align subsemigroup.le_prod_iff Subsemigroup.le_prod_iff
 #align add_subsemigroup.le_prod_iff AddSubsemigroup.le_prod_iff
+-/
 
 end Subsemigroup
 
@@ -800,29 +916,37 @@ def srange (f : M →ₙ* N) : Subsemigroup N :=
 #align add_hom.srange AddHom.srange
 -/
 
+#print MulHom.coe_srange /-
 @[simp, to_additive]
 theorem coe_srange (f : M →ₙ* N) : (f.srange : Set N) = Set.range f :=
   rfl
 #align mul_hom.coe_srange MulHom.coe_srange
 #align add_hom.coe_srange AddHom.coe_srange
+-/
 
+#print MulHom.mem_srange /-
 @[simp, to_additive]
 theorem mem_srange {f : M →ₙ* N} {y : N} : y ∈ f.srange ↔ ∃ x, f x = y :=
   Iff.rfl
 #align mul_hom.mem_srange MulHom.mem_srange
 #align add_hom.mem_srange AddHom.mem_srange
+-/
 
+#print MulHom.srange_eq_map /-
 @[to_additive]
 theorem srange_eq_map (f : M →ₙ* N) : f.srange = (⊤ : Subsemigroup M).map f :=
   copy_eq _
 #align mul_hom.srange_eq_map MulHom.srange_eq_map
 #align add_hom.srange_eq_map AddHom.srange_eq_map
+-/
 
+#print MulHom.map_srange /-
 @[to_additive]
 theorem map_srange (g : N →ₙ* P) (f : M →ₙ* N) : f.srange.map g = (g.comp f).srange := by
   simpa only [srange_eq_map] using (⊤ : Subsemigroup M).map_map g f
 #align mul_hom.map_srange MulHom.map_srange
 #align add_hom.map_srange AddHom.map_srange
+-/
 
 #print MulHom.srange_top_iff_surjective /-
 @[to_additive]
@@ -843,12 +967,15 @@ theorem srange_top_of_surjective {N} [Mul N] (f : M →ₙ* N) (hf : Function.Su
 #align add_hom.srange_top_of_surjective AddHom.srange_top_of_surjective
 -/
 
+#print MulHom.mclosure_preimage_le /-
 @[to_additive]
 theorem mclosure_preimage_le (f : M →ₙ* N) (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 mul_hom.mclosure_preimage_le MulHom.mclosure_preimage_le
 #align add_hom.mclosure_preimage_le AddHom.mclosure_preimage_le
+-/
 
+#print MulHom.map_mclosure /-
 /-- The image under a semigroup hom of the subsemigroup generated by a set equals the subsemigroup
 generated by the image of the set. -/
 @[to_additive
@@ -860,6 +987,7 @@ theorem map_mclosure (f : M →ₙ* N) (s : Set M) : (closure s).map f = closure
     (closure_le.2 <| Set.image_subset _ subset_closure)
 #align mul_hom.map_mclosure MulHom.map_mclosure
 #align add_hom.map_mclosure AddHom.map_mclosure
+-/
 
 #print MulHom.restrict /-
 /-- Restriction of a semigroup hom to a subsemigroup of the domain. -/
@@ -908,12 +1036,15 @@ theorem coe_srangeRestrict {N} [Mul N] (f : M →ₙ* N) (x : M) : (f.srangeRest
 #align add_hom.coe_srange_restrict AddHom.coe_srangeRestrict
 -/
 
+#print MulHom.srangeRestrict_surjective /-
 @[to_additive]
 theorem srangeRestrict_surjective (f : M →ₙ* N) : Function.Surjective f.srangeRestrict :=
   fun ⟨_, ⟨x, rfl⟩⟩ => ⟨x, rfl⟩
 #align mul_hom.srange_restrict_surjective MulHom.srangeRestrict_surjective
 #align add_hom.srange_restrict_surjective AddHom.srangeRestrict_surjective
+-/
 
+#print MulHom.prod_map_comap_prod' /-
 @[to_additive]
 theorem prod_map_comap_prod' {M' : Type _} {N' : Type _} [Mul M'] [Mul N'] (f : M →ₙ* N)
     (g : M' →ₙ* N') (S : Subsemigroup N) (S' : Subsemigroup N') :
@@ -921,6 +1052,7 @@ theorem prod_map_comap_prod' {M' : Type _} {N' : Type _} [Mul M'] [Mul N'] (f :
   SetLike.coe_injective <| Set.preimage_prod_map_prod f g _ _
 #align mul_hom.prod_map_comap_prod' MulHom.prod_map_comap_prod'
 #align add_hom.sum_map_comap_sum' AddHom.prod_map_comap_prod'
+-/
 
 #print MulHom.subsemigroupComap /-
 /-- The `mul_hom` from the preimage of a subsemigroup to itself. -/
@@ -947,11 +1079,13 @@ def subsemigroupMap (f : M →ₙ* N) (M' : Subsemigroup M) : M' →ₙ* M'.map
 #align add_hom.subsemigroup_map AddHom.subsemigroupMap
 -/
 
+#print MulHom.subsemigroupMap_surjective /-
 @[to_additive]
 theorem subsemigroupMap_surjective (f : M →ₙ* N) (M' : Subsemigroup M) :
     Function.Surjective (f.subsemigroupMap M') := by rintro ⟨_, x, hx, rfl⟩; exact ⟨⟨x, hx⟩, rfl⟩
 #align mul_hom.subsemigroup_map_surjective MulHom.subsemigroupMap_surjective
 #align add_hom.subsemigroup_map_surjective AddHom.subsemigroupMap_surjective
+-/
 
 end MulHom
 
@@ -969,12 +1103,15 @@ theorem srange_fst [Nonempty N] : (fst M N).srange = ⊤ :=
 #align add_subsemigroup.srange_fst AddSubsemigroup.srange_fst
 -/
 
+#print Subsemigroup.srange_snd /-
 @[simp, to_additive]
 theorem srange_snd [Nonempty M] : (snd M N).srange = ⊤ :=
   (snd M N).srange_top_of_surjective <| Prod.snd_surjective
 #align subsemigroup.srange_snd Subsemigroup.srange_snd
 #align add_subsemigroup.srange_snd AddSubsemigroup.srange_snd
+-/
 
+#print Subsemigroup.prod_eq_top_iff /-
 @[to_additive]
 theorem prod_eq_top_iff [Nonempty M] [Nonempty N] {s : Subsemigroup M} {t : Subsemigroup N} :
     s.Prod t = ⊤ ↔ s = ⊤ ∧ t = ⊤ := by
@@ -982,13 +1119,16 @@ theorem prod_eq_top_iff [Nonempty M] [Nonempty N] {s : Subsemigroup M} {t : Subs
     srange_snd]
 #align subsemigroup.prod_eq_top_iff Subsemigroup.prod_eq_top_iff
 #align add_subsemigroup.sum_eq_top_iff AddSubsemigroup.prod_eq_top_iff
+-/
 
+#print Subsemigroup.inclusion /-
 /-- The semigroup hom associated to an inclusion of subsemigroups. -/
 @[to_additive "The `add_semigroup` hom associated to an inclusion of subsemigroups."]
 def inclusion {S T : Subsemigroup M} (h : S ≤ T) : S →ₙ* T :=
   (MulMemClass.subtype S).codRestrict _ fun x => h x.2
 #align subsemigroup.inclusion Subsemigroup.inclusion
 #align add_subsemigroup.inclusion AddSubsemigroup.inclusion
+-/
 
 #print Subsemigroup.range_subtype /-
 @[simp, to_additive]
Diff
@@ -82,12 +82,6 @@ section
 
 variable [Mul M]
 
-/- warning: subsemigroup.to_add_subsemigroup -> Subsemigroup.toAddSubsemigroup is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M], OrderIso.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)))))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M], OrderIso.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1))))))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.to_add_subsemigroup Subsemigroup.toAddSubsemigroupₓ'. -/
 /-- Subsemigroups of semigroup `M` are isomorphic to additive subsemigroups of `additive M`. -/
 @[simps]
 def Subsemigroup.toAddSubsemigroup : Subsemigroup M ≃o AddSubsemigroup (Additive M)
@@ -103,21 +97,12 @@ def Subsemigroup.toAddSubsemigroup : Subsemigroup M ≃o AddSubsemigroup (Additi
   map_rel_iff' a b := Iff.rfl
 #align subsemigroup.to_add_subsemigroup Subsemigroup.toAddSubsemigroup
 
-/- warning: add_subsemigroup.to_subsemigroup' -> AddSubsemigroup.toSubsemigroup' is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M], OrderIso.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1))))) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M], OrderIso.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)))))) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))))
-Case conversion may be inaccurate. Consider using '#align add_subsemigroup.to_subsemigroup' AddSubsemigroup.toSubsemigroup'ₓ'. -/
 /-- Additive subsemigroups of an additive semigroup `additive M` are isomorphic to subsemigroups
 of `M`. -/
 abbrev AddSubsemigroup.toSubsemigroup' : AddSubsemigroup (Additive M) ≃o Subsemigroup M :=
   Subsemigroup.toAddSubsemigroup.symm
 #align add_subsemigroup.to_subsemigroup' AddSubsemigroup.toSubsemigroup'
 
-/- warning: subsemigroup.to_add_subsemigroup_closure -> Subsemigroup.toAddSubsemigroup_closure is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align subsemigroup.to_add_subsemigroup_closure Subsemigroup.toAddSubsemigroup_closureₓ'. -/
 theorem Subsemigroup.toAddSubsemigroup_closure (S : Set M) :
     (Subsemigroup.closure S).toAddSubsemigroup = AddSubsemigroup.closure (Additive.toMul ⁻¹' S) :=
   le_antisymm
@@ -126,9 +111,6 @@ theorem Subsemigroup.toAddSubsemigroup_closure (S : Set M) :
     (AddSubsemigroup.closure_le.2 Subsemigroup.subset_closure)
 #align subsemigroup.to_add_subsemigroup_closure Subsemigroup.toAddSubsemigroup_closure
 
-/- warning: add_subsemigroup.to_subsemigroup'_closure -> AddSubsemigroup.toSubsemigroup'_closure is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align add_subsemigroup.to_subsemigroup'_closure AddSubsemigroup.toSubsemigroup'_closureₓ'. -/
 theorem AddSubsemigroup.toSubsemigroup'_closure (S : Set (Additive M)) :
     (AddSubsemigroup.closure S).toSubsemigroup' =
       Subsemigroup.closure (Multiplicative.ofAdd ⁻¹' S) :=
@@ -144,12 +126,6 @@ section
 
 variable {A : Type _} [Add A]
 
-/- warning: add_subsemigroup.to_subsemigroup -> AddSubsemigroup.toSubsemigroup is a dubious translation:
-lean 3 declaration is
-  forall {A : Type.{u1}} [_inst_1 : Add.{u1} A], OrderIso.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1)))) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)))))
-but is expected to have type
-  forall {A : Type.{u1}} [_inst_1 : Add.{u1} A], OrderIso.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1))))))
-Case conversion may be inaccurate. Consider using '#align add_subsemigroup.to_subsemigroup AddSubsemigroup.toSubsemigroupₓ'. -/
 /-- Additive subsemigroups of an additive semigroup `A` are isomorphic to
 multiplicative subsemigroups of `multiplicative A`. -/
 @[simps]
@@ -166,21 +142,12 @@ def AddSubsemigroup.toSubsemigroup : AddSubsemigroup A ≃o Subsemigroup (Multip
   map_rel_iff' a b := Iff.rfl
 #align add_subsemigroup.to_subsemigroup AddSubsemigroup.toSubsemigroup
 
-/- warning: subsemigroup.to_add_subsemigroup' -> Subsemigroup.toAddSubsemigroup' is a dubious translation:
-lean 3 declaration is
-  forall {A : Type.{u1}} [_inst_1 : Add.{u1} A], OrderIso.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1))))) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1))))
-but is expected to have type
-  forall {A : Type.{u1}} [_inst_1 : Add.{u1} A], OrderIso.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1)))))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.to_add_subsemigroup' Subsemigroup.toAddSubsemigroup'ₓ'. -/
 /-- Subsemigroups of a semigroup `multiplicative A` are isomorphic to additive subsemigroups
 of `A`. -/
 abbrev Subsemigroup.toAddSubsemigroup' : Subsemigroup (Multiplicative A) ≃o AddSubsemigroup A :=
   AddSubsemigroup.toSubsemigroup.symm
 #align subsemigroup.to_add_subsemigroup' Subsemigroup.toAddSubsemigroup'
 
-/- warning: add_subsemigroup.to_subsemigroup_closure -> AddSubsemigroup.toSubsemigroup_closure is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align add_subsemigroup.to_subsemigroup_closure AddSubsemigroup.toSubsemigroup_closureₓ'. -/
 theorem AddSubsemigroup.toSubsemigroup_closure (S : Set A) :
     (AddSubsemigroup.closure S).toSubsemigroup =
       Subsemigroup.closure (Multiplicative.toAdd ⁻¹' S) :=
@@ -190,9 +157,6 @@ theorem AddSubsemigroup.toSubsemigroup_closure (S : Set A) :
     (Subsemigroup.closure_le.2 AddSubsemigroup.subset_closure)
 #align add_subsemigroup.to_subsemigroup_closure AddSubsemigroup.toSubsemigroup_closure
 
-/- warning: subsemigroup.to_add_subsemigroup'_closure -> Subsemigroup.toAddSubsemigroup'_closure is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align subsemigroup.to_add_subsemigroup'_closure Subsemigroup.toAddSubsemigroup'_closureₓ'. -/
 theorem Subsemigroup.toAddSubsemigroup'_closure (S : Set (Multiplicative A)) :
     (Subsemigroup.closure S).toAddSubsemigroup' = AddSubsemigroup.closure (Additive.ofMul ⁻¹' S) :=
   le_antisymm
@@ -273,72 +237,36 @@ def map (f : M →ₙ* N) (S : Subsemigroup M) : Subsemigroup N
 #align add_subsemigroup.map AddSubsemigroup.map
 -/
 
-/- warning: subsemigroup.coe_map -> Subsemigroup.coe_map is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (S : Subsemigroup.{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) (Subsemigroup.{u2} N _inst_2) (Set.{u2} N) (HasLiftT.mk.{succ u2, succ u2} (Subsemigroup.{u2} N _inst_2) (Set.{u2} N) (CoeTCₓ.coe.{succ u2, succ u2} (Subsemigroup.{u2} N _inst_2) (Set.{u2} N) (SetLike.Set.hasCoeT.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) (Set.image.{u1, u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) S))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (S : Subsemigroup.{u2} M _inst_1), Eq.{succ u1} (Set.{u1} N) (SetLike.coe.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)) (Set.image.{u2, u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) (SetLike.coe.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) S))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.coe_map Subsemigroup.coe_mapₓ'. -/
 @[simp, to_additive]
 theorem coe_map (f : M →ₙ* N) (S : Subsemigroup M) : (S.map f : Set N) = f '' S :=
   rfl
 #align subsemigroup.coe_map Subsemigroup.coe_map
 #align add_subsemigroup.coe_map AddSubsemigroup.coe_map
 
-/- warning: subsemigroup.mem_map -> Subsemigroup.mem_map is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2} {S : Subsemigroup.{u1} M _inst_1} {y : N}, Iff (Membership.Mem.{u2, u2} N (Subsemigroup.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) y (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) (Exists.{succ u1} M (fun (x : M) => Exists.{0} (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x S) (fun (H : Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x S) => Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) y)))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2} {S : Subsemigroup.{u2} M _inst_1} {y : N}, Iff (Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) y (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)) (Exists.{succ u2} M (fun (x : M) => And (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S) (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) y)))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.mem_map Subsemigroup.mem_mapₓ'. -/
 @[simp, to_additive]
 theorem mem_map {f : M →ₙ* N} {S : Subsemigroup M} {y : N} : y ∈ S.map f ↔ ∃ x ∈ S, f x = y :=
   mem_image_iff_bex
 #align subsemigroup.mem_map Subsemigroup.mem_map
 #align add_subsemigroup.mem_map AddSubsemigroup.mem_map
 
-/- warning: subsemigroup.mem_map_of_mem -> Subsemigroup.mem_map_of_mem is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) {S : Subsemigroup.{u1} M _inst_1} {x : M}, (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x S) -> (Membership.Mem.{u2, u2} N (Subsemigroup.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (Subsemigroup.map.{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 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) {S : Subsemigroup.{u2} M _inst_1} {x : M}, (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S) -> (Membership.mem.{u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.mem_map_of_mem Subsemigroup.mem_map_of_memₓ'. -/
 @[to_additive]
 theorem mem_map_of_mem (f : M →ₙ* N) {S : Subsemigroup M} {x : M} (hx : x ∈ S) : f x ∈ S.map f :=
   mem_image_of_mem f hx
 #align subsemigroup.mem_map_of_mem Subsemigroup.mem_map_of_mem
 #align add_subsemigroup.mem_map_of_mem AddSubsemigroup.mem_map_of_mem
 
-/- warning: subsemigroup.apply_coe_mem_map -> Subsemigroup.apply_coe_mem_map is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (S : Subsemigroup.{u1} M _inst_1) (x : coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S), Membership.Mem.{u2, u2} N (Subsemigroup.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x S))))) x)) (Subsemigroup.map.{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 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (S : Subsemigroup.{u2} M _inst_1) (x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)), Membership.mem.{u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (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} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) S)) x)) (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f (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} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) S)) x)) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)
-Case conversion may be inaccurate. Consider using '#align subsemigroup.apply_coe_mem_map Subsemigroup.apply_coe_mem_mapₓ'. -/
 @[to_additive]
 theorem apply_coe_mem_map (f : M →ₙ* N) (S : Subsemigroup M) (x : S) : f x ∈ S.map f :=
   mem_map_of_mem f x.Prop
 #align subsemigroup.apply_coe_mem_map Subsemigroup.apply_coe_mem_map
 #align add_subsemigroup.apply_coe_mem_map AddSubsemigroup.apply_coe_mem_map
 
-/- warning: subsemigroup.map_map -> Subsemigroup.map_map is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u3} P] (S : Subsemigroup.{u1} M _inst_1) (g : MulHom.{u2, u3} N P _inst_2 _inst_3) (f : MulHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u3} (Subsemigroup.{u3} P _inst_3) (Subsemigroup.map.{u2, u3} N P _inst_2 _inst_3 g (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) (Subsemigroup.map.{u1, u3} M P _inst_1 _inst_3 (MulHom.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 : Mul.{u1} M] [_inst_2 : Mul.{u3} N] [_inst_3 : Mul.{u2} P] (S : Subsemigroup.{u1} M _inst_1) (g : MulHom.{u3, u2} N P _inst_2 _inst_3) (f : MulHom.{u1, u3} M N _inst_1 _inst_2), Eq.{succ u2} (Subsemigroup.{u2} P _inst_3) (Subsemigroup.map.{u3, u2} N P _inst_2 _inst_3 g (Subsemigroup.map.{u1, u3} M N _inst_1 _inst_2 f S)) (Subsemigroup.map.{u1, u2} M P _inst_1 _inst_3 (MulHom.comp.{u1, u3, u2} M N P _inst_1 _inst_2 _inst_3 g f) S)
-Case conversion may be inaccurate. Consider using '#align subsemigroup.map_map Subsemigroup.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 subsemigroup.map_map Subsemigroup.map_map
 #align add_subsemigroup.map_map AddSubsemigroup.map_map
 
-/- warning: subsemigroup.mem_map_iff_mem -> Subsemigroup.mem_map_iff_mem is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall {S : Subsemigroup.{u1} M _inst_1} {x : M}, Iff (Membership.Mem.{u2, u2} N (Subsemigroup.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x S))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall {S : Subsemigroup.{u2} M _inst_1} {x : M}, Iff (Membership.mem.{u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)) (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.mem_map_iff_mem Subsemigroup.mem_map_iff_memₓ'. -/
 @[to_additive]
 theorem mem_map_iff_mem {f : M →ₙ* N} (hf : Function.Injective f) {S : Subsemigroup M} {x : M} :
     f x ∈ S.map f ↔ x ∈ S :=
@@ -346,12 +274,6 @@ theorem mem_map_iff_mem {f : M →ₙ* N} (hf : Function.Injective f) {S : Subse
 #align subsemigroup.mem_map_iff_mem Subsemigroup.mem_map_iff_mem
 #align add_subsemigroup.mem_map_iff_mem AddSubsemigroup.mem_map_iff_mem
 
-/- warning: subsemigroup.map_le_iff_le_comap -> Subsemigroup.map_le_iff_le_comap is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2} {S : Subsemigroup.{u1} M _inst_1} {T : Subsemigroup.{u2} N _inst_2}, Iff (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S) T) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) S (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2} {S : Subsemigroup.{u2} M _inst_1} {T : Subsemigroup.{u1} N _inst_2}, Iff (LE.le.{u1} (Subsemigroup.{u1} N _inst_2) (Preorder.toLE.{u1} (Subsemigroup.{u1} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2))))) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S) T) (LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1))))) S (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f T))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.map_le_iff_le_comap Subsemigroup.map_le_iff_le_comapₓ'. -/
 @[to_additive]
 theorem map_le_iff_le_comap {f : M →ₙ* N} {S : Subsemigroup M} {T : Subsemigroup N} :
     S.map f ≤ T ↔ S ≤ T.comap f :=
@@ -359,96 +281,48 @@ theorem map_le_iff_le_comap {f : M →ₙ* N} {S : Subsemigroup M} {T : Subsemig
 #align subsemigroup.map_le_iff_le_comap Subsemigroup.map_le_iff_le_comap
 #align add_subsemigroup.map_le_iff_le_comap AddSubsemigroup.map_le_iff_le_comap
 
-/- warning: subsemigroup.gc_map_comap -> Subsemigroup.gc_map_comap is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2), GaloisConnection.{u1, u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2), GaloisConnection.{u2, u1} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.{u1} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)))) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2)))) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f)
-Case conversion may be inaccurate. Consider using '#align subsemigroup.gc_map_comap Subsemigroup.gc_map_comapₓ'. -/
 @[to_additive]
 theorem gc_map_comap (f : M →ₙ* N) : GaloisConnection (map f) (comap f) := fun S T =>
   map_le_iff_le_comap
 #align subsemigroup.gc_map_comap Subsemigroup.gc_map_comap
 #align add_subsemigroup.gc_map_comap AddSubsemigroup.gc_map_comap
 
-/- warning: subsemigroup.map_le_of_le_comap -> Subsemigroup.map_le_of_le_comap is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (S : Subsemigroup.{u1} M _inst_1) {T : Subsemigroup.{u2} N _inst_2} {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) S (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T)) -> (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S) T)
-but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (S : Subsemigroup.{u1} M _inst_1) {T : Subsemigroup.{u2} N _inst_2} {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) S (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T)) -> (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toLE.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2))))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S) T)
-Case conversion may be inaccurate. Consider using '#align subsemigroup.map_le_of_le_comap Subsemigroup.map_le_of_le_comapₓ'. -/
 @[to_additive]
 theorem map_le_of_le_comap {T : Subsemigroup N} {f : M →ₙ* N} : S ≤ T.comap f → S.map f ≤ T :=
   (gc_map_comap f).l_le
 #align subsemigroup.map_le_of_le_comap Subsemigroup.map_le_of_le_comap
 #align add_subsemigroup.map_le_of_le_comap AddSubsemigroup.map_le_of_le_comap
 
-/- warning: subsemigroup.le_comap_of_map_le -> Subsemigroup.le_comap_of_map_le is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (S : Subsemigroup.{u1} M _inst_1) {T : Subsemigroup.{u2} N _inst_2} {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S) T) -> (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) S (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))
-but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (S : Subsemigroup.{u1} M _inst_1) {T : Subsemigroup.{u2} N _inst_2} {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toLE.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2))))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S) T) -> (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) S (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.le_comap_of_map_le Subsemigroup.le_comap_of_map_leₓ'. -/
 @[to_additive]
 theorem le_comap_of_map_le {T : Subsemigroup N} {f : M →ₙ* N} : S.map f ≤ T → S ≤ T.comap f :=
   (gc_map_comap f).le_u
 #align subsemigroup.le_comap_of_map_le Subsemigroup.le_comap_of_map_le
 #align add_subsemigroup.le_comap_of_map_le AddSubsemigroup.le_comap_of_map_le
 
-/- warning: subsemigroup.le_comap_map -> Subsemigroup.le_comap_map is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (S : Subsemigroup.{u1} M _inst_1) {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) S (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (Subsemigroup.map.{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 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (S : Subsemigroup.{u2} M _inst_1) {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1))))) S (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.le_comap_map Subsemigroup.le_comap_mapₓ'. -/
 @[to_additive]
 theorem le_comap_map {f : M →ₙ* N} : S ≤ (S.map f).comap f :=
   (gc_map_comap f).le_u_l _
 #align subsemigroup.le_comap_map Subsemigroup.le_comap_map
 #align add_subsemigroup.le_comap_map AddSubsemigroup.le_comap_map
 
-/- warning: subsemigroup.map_comap_le -> Subsemigroup.map_comap_le is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {S : Subsemigroup.{u2} N _inst_2} {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S)) S
-but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {S : Subsemigroup.{u2} N _inst_2} {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toLE.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2))))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S)) S
-Case conversion may be inaccurate. Consider using '#align subsemigroup.map_comap_le Subsemigroup.map_comap_leₓ'. -/
 @[to_additive]
 theorem map_comap_le {S : Subsemigroup N} {f : M →ₙ* N} : (S.comap f).map f ≤ S :=
   (gc_map_comap f).l_u_le _
 #align subsemigroup.map_comap_le Subsemigroup.map_comap_le
 #align add_subsemigroup.map_comap_le AddSubsemigroup.map_comap_le
 
-/- warning: subsemigroup.monotone_map -> Subsemigroup.monotone_map is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, Monotone.{u1, u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, Monotone.{u2, u1} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.{u1} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)))) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2)))) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f)
-Case conversion may be inaccurate. Consider using '#align subsemigroup.monotone_map Subsemigroup.monotone_mapₓ'. -/
 @[to_additive]
 theorem monotone_map {f : M →ₙ* N} : Monotone (map f) :=
   (gc_map_comap f).monotone_l
 #align subsemigroup.monotone_map Subsemigroup.monotone_map
 #align add_subsemigroup.monotone_map AddSubsemigroup.monotone_map
 
-/- warning: subsemigroup.monotone_comap -> Subsemigroup.monotone_comap is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, Monotone.{u2, u1} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2))) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, Monotone.{u1, u2} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2)))) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)))) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f)
-Case conversion may be inaccurate. Consider using '#align subsemigroup.monotone_comap Subsemigroup.monotone_comapₓ'. -/
 @[to_additive]
 theorem monotone_comap {f : M →ₙ* N} : Monotone (comap f) :=
   (gc_map_comap f).monotone_u
 #align subsemigroup.monotone_comap Subsemigroup.monotone_comap
 #align add_subsemigroup.monotone_comap AddSubsemigroup.monotone_comap
 
-/- warning: subsemigroup.map_comap_map -> Subsemigroup.map_comap_map is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (S : Subsemigroup.{u1} M _inst_1) {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S))) (Subsemigroup.map.{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 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (S : Subsemigroup.{u2} M _inst_1) {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, Eq.{succ u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)
-Case conversion may be inaccurate. Consider using '#align subsemigroup.map_comap_map Subsemigroup.map_comap_mapₓ'. -/
 @[simp, to_additive]
 theorem map_comap_map {f : M →ₙ* N} : ((S.map f).comap f).map f = S.map f :=
   (gc_map_comap f).l_u_l_eq_l _
@@ -464,24 +338,12 @@ theorem comap_map_comap {S : Subsemigroup N} {f : M →ₙ* N} :
 #align add_subsemigroup.comap_map_comap AddSubsemigroup.comap_map_comap
 -/
 
-/- warning: subsemigroup.map_sup -> Subsemigroup.map_sup is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (S : Subsemigroup.{u1} M _inst_1) (T : Subsemigroup.{u1} M _inst_1) (f : MulHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Sup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1)))) S T)) (Sup.sup.{u2} (Subsemigroup.{u2} N _inst_2) (SemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.completeLattice.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f T))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (S : Subsemigroup.{u2} M _inst_1) (T : Subsemigroup.{u2} M _inst_1) (f : MulHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f (Sup.sup.{u2} (Subsemigroup.{u2} M _inst_1) (SemilatticeSup.toSup.{u2} (Subsemigroup.{u2} M _inst_1) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)))) S T)) (Sup.sup.{u1} (Subsemigroup.{u1} N _inst_2) (SemilatticeSup.toSup.{u1} (Subsemigroup.{u1} N _inst_2) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2)))) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f T))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.map_sup Subsemigroup.map_supₓ'. -/
 @[to_additive]
 theorem map_sup (S T : Subsemigroup M) (f : M →ₙ* N) : (S ⊔ T).map f = S.map f ⊔ T.map f :=
   (gc_map_comap f).l_sup
 #align subsemigroup.map_sup Subsemigroup.map_sup
 #align add_subsemigroup.map_sup AddSubsemigroup.map_sup
 
-/- warning: subsemigroup.map_supr -> Subsemigroup.map_iSup is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {ι : Sort.{u3}} (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (s : ι -> (Subsemigroup.{u1} M _inst_1)), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (iSup.{u1, u3} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1))) ι s)) (iSup.{u2, u3} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.completeLattice.{u2} N _inst_2))) ι (fun (i : ι) => Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (s i)))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {ι : Sort.{u3}} (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (s : ι -> (Subsemigroup.{u2} M _inst_1)), Eq.{succ u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f (iSup.{u2, u3} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι s)) (iSup.{u1, u3} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toSupSet.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2)) ι (fun (i : ι) => Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f (s i)))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.map_supr Subsemigroup.map_iSupₓ'. -/
 @[to_additive]
 theorem map_iSup {ι : Sort _} (f : M →ₙ* N) (s : ι → Subsemigroup M) :
     (iSup s).map f = ⨆ i, (s i).map f :=
@@ -489,24 +351,12 @@ theorem map_iSup {ι : Sort _} (f : M →ₙ* N) (s : ι → Subsemigroup M) :
 #align subsemigroup.map_supr Subsemigroup.map_iSup
 #align add_subsemigroup.map_supr AddSubsemigroup.map_iSup
 
-/- warning: subsemigroup.comap_inf -> Subsemigroup.comap_inf is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2) (f : MulHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (Inf.inf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasInf.{u2} N _inst_2) S T)) (Inf.inf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasInf.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))
-but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2) (f : MulHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (Inf.inf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instInfSubsemigroup.{u2} N _inst_2) S T)) (Inf.inf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instInfSubsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_inf Subsemigroup.comap_infₓ'. -/
 @[to_additive]
 theorem comap_inf (S T : Subsemigroup N) (f : M →ₙ* N) : (S ⊓ T).comap f = S.comap f ⊓ T.comap f :=
   (gc_map_comap f).u_inf
 #align subsemigroup.comap_inf Subsemigroup.comap_inf
 #align add_subsemigroup.comap_inf AddSubsemigroup.comap_inf
 
-/- warning: subsemigroup.comap_infi -> Subsemigroup.comap_iInf is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {ι : Sort.{u3}} (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (s : ι -> (Subsemigroup.{u2} N _inst_2)), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (iInf.{u2, u3} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasInf.{u2} N _inst_2) ι s)) (iInf.{u1, u3} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasInf.{u1} M _inst_1) ι (fun (i : ι) => Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (s i)))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {ι : Sort.{u3}} (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (s : ι -> (Subsemigroup.{u1} N _inst_2)), Eq.{succ u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (iInf.{u1, u3} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instInfSetSubsemigroup.{u1} N _inst_2) ι s)) (iInf.{u2, u3} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instInfSetSubsemigroup.{u2} M _inst_1) ι (fun (i : ι) => Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (s i)))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_infi Subsemigroup.comap_iInfₓ'. -/
 @[to_additive]
 theorem comap_iInf {ι : Sort _} (f : M →ₙ* N) (s : ι → Subsemigroup N) :
     (iInf s).comap f = ⨅ i, (s i).comap f :=
@@ -514,24 +364,12 @@ theorem comap_iInf {ι : Sort _} (f : M →ₙ* N) (s : ι → Subsemigroup N) :
 #align subsemigroup.comap_infi Subsemigroup.comap_iInf
 #align add_subsemigroup.comap_infi AddSubsemigroup.comap_iInf
 
-/- warning: subsemigroup.map_bot -> Subsemigroup.map_bot is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Bot.bot.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasBot.{u1} M _inst_1))) (Bot.bot.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasBot.{u2} N _inst_2))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f (Bot.bot.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instBotSubsemigroup.{u2} M _inst_1))) (Bot.bot.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instBotSubsemigroup.{u1} N _inst_2))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.map_bot Subsemigroup.map_botₓ'. -/
 @[simp, to_additive]
 theorem map_bot (f : M →ₙ* N) : (⊥ : Subsemigroup M).map f = ⊥ :=
   (gc_map_comap f).l_bot
 #align subsemigroup.map_bot Subsemigroup.map_bot
 #align add_subsemigroup.map_bot AddSubsemigroup.map_bot
 
-/- warning: subsemigroup.comap_top -> Subsemigroup.comap_top is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (Top.top.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasTop.{u2} N _inst_2))) (Top.top.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasTop.{u1} M _inst_1))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Top.top.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instTopSubsemigroup.{u1} N _inst_2))) (Top.top.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instTopSubsemigroup.{u2} M _inst_1))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_top Subsemigroup.comap_topₓ'. -/
 @[simp, to_additive]
 theorem comap_top (f : M →ₙ* N) : (⊤ : Subsemigroup N).comap f = ⊤ :=
   (gc_map_comap f).u_top
@@ -552,12 +390,6 @@ variable {ι : Type _} {f : M →ₙ* N} (hf : Function.Injective f)
 
 include hf
 
-/- warning: subsemigroup.gci_map_comap -> Subsemigroup.gciMapComap is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (GaloisCoinsertion.{u1, u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f))
-but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (GaloisCoinsertion.{u1, u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.gci_map_comap Subsemigroup.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) :=
@@ -565,12 +397,6 @@ def gciMapComap : GaloisCoinsertion (map f) (comap f) :=
 #align subsemigroup.gci_map_comap Subsemigroup.gciMapComap
 #align add_subsemigroup.gci_map_comap AddSubsemigroup.gciMapComap
 
-/- warning: subsemigroup.comap_map_eq_of_injective -> Subsemigroup.comap_map_eq_of_injective is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : Subsemigroup.{u1} M _inst_1), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) S)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} M _inst_1), Eq.{succ u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)) S)
-Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_map_eq_of_injective Subsemigroup.comap_map_eq_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_map_eq_of_injective (S : Subsemigroup M) : (S.map f).comap f = S :=
   (gciMapComap hf).u_l_eq _
@@ -585,36 +411,18 @@ theorem comap_surjective_of_injective : Function.Surjective (comap f) :=
 #align add_subsemigroup.comap_surjective_of_injective AddSubsemigroup.comap_surjective_of_injective
 -/
 
-/- warning: subsemigroup.map_injective_of_injective -> Subsemigroup.map_injective_of_injective is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (Function.Injective.{succ u1, succ u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (Function.Injective.{succ u2, succ u1} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.map_injective_of_injective Subsemigroup.map_injective_of_injectiveₓ'. -/
 @[to_additive]
 theorem map_injective_of_injective : Function.Injective (map f) :=
   (gciMapComap hf).l_injective
 #align subsemigroup.map_injective_of_injective Subsemigroup.map_injective_of_injective
 #align add_subsemigroup.map_injective_of_injective AddSubsemigroup.map_injective_of_injective
 
-/- warning: subsemigroup.comap_inf_map_of_injective -> Subsemigroup.comap_inf_map_of_injective is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : Subsemigroup.{u1} M _inst_1) (T : Subsemigroup.{u1} M _inst_1), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (Inf.inf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasInf.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f T))) (Inf.inf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasInf.{u1} M _inst_1) S T))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} M _inst_1) (T : Subsemigroup.{u2} M _inst_1), Eq.{succ u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Inf.inf.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instInfSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f T))) (Inf.inf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instInfSubsemigroup.{u2} M _inst_1) S T))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_inf_map_of_injective Subsemigroup.comap_inf_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_inf_map_of_injective (S T : Subsemigroup M) : (S.map f ⊓ T.map f).comap f = S ⊓ T :=
   (gciMapComap hf).u_inf_l _ _
 #align subsemigroup.comap_inf_map_of_injective Subsemigroup.comap_inf_map_of_injective
 #align add_subsemigroup.comap_inf_map_of_injective AddSubsemigroup.comap_inf_map_of_injective
 
-/- warning: subsemigroup.comap_infi_map_of_injective -> Subsemigroup.comap_iInf_map_of_injective is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u3}} {f : MulHom.{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)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : ι -> (Subsemigroup.{u1} M _inst_1)), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (iInf.{u2, succ u3} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasInf.{u2} N _inst_2) ι (fun (i : ι) => Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (S i)))) (iInf.{u1, succ u3} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasInf.{u1} M _inst_1) ι S))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u1}} {f : MulHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} M _inst_1)), Eq.{succ u3} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.comap.{u3, u2} M N _inst_1 _inst_2 f (iInf.{u2, succ u1} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instInfSetSubsemigroup.{u2} N _inst_2) ι (fun (i : ι) => Subsemigroup.map.{u3, u2} M N _inst_1 _inst_2 f (S i)))) (iInf.{u3, succ u1} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.instInfSetSubsemigroup.{u3} M _inst_1) ι S))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_infi_map_of_injective Subsemigroup.comap_iInf_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_iInf_map_of_injective (S : ι → Subsemigroup M) :
     (⨅ i, (S i).map f).comap f = iInf S :=
@@ -622,24 +430,12 @@ theorem comap_iInf_map_of_injective (S : ι → Subsemigroup M) :
 #align subsemigroup.comap_infi_map_of_injective Subsemigroup.comap_iInf_map_of_injective
 #align add_subsemigroup.comap_infi_map_of_injective AddSubsemigroup.comap_iInf_map_of_injective
 
-/- warning: subsemigroup.comap_sup_map_of_injective -> Subsemigroup.comap_sup_map_of_injective is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : Subsemigroup.{u1} M _inst_1) (T : Subsemigroup.{u1} M _inst_1), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (Sup.sup.{u2} (Subsemigroup.{u2} N _inst_2) (SemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.completeLattice.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f T))) (Sup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1)))) S T))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} M _inst_1) (T : Subsemigroup.{u2} M _inst_1), Eq.{succ u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Sup.sup.{u1} (Subsemigroup.{u1} N _inst_2) (SemilatticeSup.toSup.{u1} (Subsemigroup.{u1} N _inst_2) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2)))) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f T))) (Sup.sup.{u2} (Subsemigroup.{u2} M _inst_1) (SemilatticeSup.toSup.{u2} (Subsemigroup.{u2} M _inst_1) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)))) S T))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_sup_map_of_injective Subsemigroup.comap_sup_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_sup_map_of_injective (S T : Subsemigroup M) : (S.map f ⊔ T.map f).comap f = S ⊔ T :=
   (gciMapComap hf).u_sup_l _ _
 #align subsemigroup.comap_sup_map_of_injective Subsemigroup.comap_sup_map_of_injective
 #align add_subsemigroup.comap_sup_map_of_injective AddSubsemigroup.comap_sup_map_of_injective
 
-/- warning: subsemigroup.comap_supr_map_of_injective -> Subsemigroup.comap_iSup_map_of_injective is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u3}} {f : MulHom.{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)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : ι -> (Subsemigroup.{u1} M _inst_1)), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (iSup.{u2, succ u3} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.completeLattice.{u2} N _inst_2))) ι (fun (i : ι) => Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (S i)))) (iSup.{u1, succ u3} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1))) ι S))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u1}} {f : MulHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} M _inst_1)), Eq.{succ u3} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.comap.{u3, u2} M N _inst_1 _inst_2 f (iSup.{u2, succ u1} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)) ι (fun (i : ι) => Subsemigroup.map.{u3, u2} M N _inst_1 _inst_2 f (S i)))) (iSup.{u3, succ u1} (Subsemigroup.{u3} M _inst_1) (CompleteLattice.toSupSet.{u3} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u3} M _inst_1)) ι S))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_supr_map_of_injective Subsemigroup.comap_iSup_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_iSup_map_of_injective (S : ι → Subsemigroup M) :
     (⨆ i, (S i).map f).comap f = iSup S :=
@@ -647,24 +443,12 @@ theorem comap_iSup_map_of_injective (S : ι → Subsemigroup M) :
 #align subsemigroup.comap_supr_map_of_injective Subsemigroup.comap_iSup_map_of_injective
 #align add_subsemigroup.comap_supr_map_of_injective AddSubsemigroup.comap_iSup_map_of_injective
 
-/- warning: subsemigroup.map_le_map_iff_of_injective -> Subsemigroup.map_le_map_iff_of_injective is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall {S : Subsemigroup.{u1} M _inst_1} {T : Subsemigroup.{u1} M _inst_1}, Iff (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f T)) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) S T))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall {S : Subsemigroup.{u2} M _inst_1} {T : Subsemigroup.{u2} M _inst_1}, Iff (LE.le.{u1} (Subsemigroup.{u1} N _inst_2) (Preorder.toLE.{u1} (Subsemigroup.{u1} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2))))) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f T)) (LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1))))) S T))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.map_le_map_iff_of_injective Subsemigroup.map_le_map_iff_of_injectiveₓ'. -/
 @[to_additive]
 theorem map_le_map_iff_of_injective {S T : Subsemigroup M} : S.map f ≤ T.map f ↔ S ≤ T :=
   (gciMapComap hf).l_le_l_iff
 #align subsemigroup.map_le_map_iff_of_injective Subsemigroup.map_le_map_iff_of_injective
 #align add_subsemigroup.map_le_map_iff_of_injective AddSubsemigroup.map_le_map_iff_of_injective
 
-/- warning: subsemigroup.map_strict_mono_of_injective -> Subsemigroup.map_strictMono_of_injective is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (StrictMono.{u1, u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (StrictMono.{u2, u1} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.{u1} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)))) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2)))) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.map_strict_mono_of_injective Subsemigroup.map_strictMono_of_injectiveₓ'. -/
 @[to_additive]
 theorem map_strictMono_of_injective : StrictMono (map f) :=
   (gciMapComap hf).strictMono_l
@@ -679,12 +463,6 @@ variable {ι : Type _} {f : M →ₙ* N} (hf : Function.Surjective f)
 
 include hf
 
-/- warning: subsemigroup.gi_map_comap -> Subsemigroup.giMapComap is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (GaloisInsertion.{u1, u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f))
-but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (GaloisInsertion.{u1, u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.gi_map_comap Subsemigroup.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) :=
@@ -702,12 +480,6 @@ theorem map_comap_eq_of_surjective (S : Subsemigroup N) : (S.comap f).map f = S
 #align add_subsemigroup.map_comap_eq_of_surjective AddSubsemigroup.map_comap_eq_of_surjective
 -/
 
-/- warning: subsemigroup.map_surjective_of_surjective -> Subsemigroup.map_surjective_of_surjective is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (Function.Surjective.{succ u1, succ u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Surjective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (Function.Surjective.{succ u2, succ u1} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.map_surjective_of_surjective Subsemigroup.map_surjective_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_surjective_of_surjective : Function.Surjective (map f) :=
   (giMapComap hf).l_surjective
@@ -722,12 +494,6 @@ theorem comap_injective_of_surjective : Function.Injective (comap f) :=
 #align add_subsemigroup.comap_injective_of_surjective AddSubsemigroup.comap_injective_of_surjective
 -/
 
-/- warning: subsemigroup.map_inf_comap_of_surjective -> Subsemigroup.map_inf_comap_of_surjective is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Inf.inf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasInf.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))) (Inf.inf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasInf.{u2} N _inst_2) S T))
-but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Inf.inf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instInfSubsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))) (Inf.inf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instInfSubsemigroup.{u2} N _inst_2) S T))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.map_inf_comap_of_surjective Subsemigroup.map_inf_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_inf_comap_of_surjective (S T : Subsemigroup N) :
     (S.comap f ⊓ T.comap f).map f = S ⊓ T :=
@@ -735,12 +501,6 @@ theorem map_inf_comap_of_surjective (S T : Subsemigroup N) :
 #align subsemigroup.map_inf_comap_of_surjective Subsemigroup.map_inf_comap_of_surjective
 #align add_subsemigroup.map_inf_comap_of_surjective AddSubsemigroup.map_inf_comap_of_surjective
 
-/- warning: subsemigroup.map_infi_comap_of_surjective -> Subsemigroup.map_iInf_comap_of_surjective is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u3}} {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : ι -> (Subsemigroup.{u2} N _inst_2)), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (iInf.{u1, succ u3} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasInf.{u1} M _inst_1) ι (fun (i : ι) => Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (S i)))) (iInf.{u2, succ u3} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasInf.{u2} N _inst_2) ι S))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u3} N] {ι : Type.{u1}} {f : MulHom.{u2, u3} M N _inst_1 _inst_2}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MulHom.{u2, u3} 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 u3, u2, u3} (MulHom.{u2, u3} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u3} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} N _inst_2)), Eq.{succ u3} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.map.{u2, u3} M N _inst_1 _inst_2 f (iInf.{u2, succ u1} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instInfSetSubsemigroup.{u2} M _inst_1) ι (fun (i : ι) => Subsemigroup.comap.{u2, u3} M N _inst_1 _inst_2 f (S i)))) (iInf.{u3, succ u1} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.instInfSetSubsemigroup.{u3} N _inst_2) ι S))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.map_infi_comap_of_surjective Subsemigroup.map_iInf_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_iInf_comap_of_surjective (S : ι → Subsemigroup N) :
     (⨅ i, (S i).comap f).map f = iInf S :=
@@ -748,12 +508,6 @@ theorem map_iInf_comap_of_surjective (S : ι → Subsemigroup N) :
 #align subsemigroup.map_infi_comap_of_surjective Subsemigroup.map_iInf_comap_of_surjective
 #align add_subsemigroup.map_infi_comap_of_surjective AddSubsemigroup.map_iInf_comap_of_surjective
 
-/- warning: subsemigroup.map_sup_comap_of_surjective -> Subsemigroup.map_sup_comap_of_surjective is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Sup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1)))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))) (Sup.sup.{u2} (Subsemigroup.{u2} N _inst_2) (SemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.completeLattice.{u2} N _inst_2)))) S T))
-but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Sup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))) (Sup.sup.{u2} (Subsemigroup.{u2} N _inst_2) (SemilatticeSup.toSup.{u2} (Subsemigroup.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)))) S T))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.map_sup_comap_of_surjective Subsemigroup.map_sup_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_sup_comap_of_surjective (S T : Subsemigroup N) :
     (S.comap f ⊔ T.comap f).map f = S ⊔ T :=
@@ -761,12 +515,6 @@ theorem map_sup_comap_of_surjective (S T : Subsemigroup N) :
 #align subsemigroup.map_sup_comap_of_surjective Subsemigroup.map_sup_comap_of_surjective
 #align add_subsemigroup.map_sup_comap_of_surjective AddSubsemigroup.map_sup_comap_of_surjective
 
-/- warning: subsemigroup.map_supr_comap_of_surjective -> Subsemigroup.map_iSup_comap_of_surjective is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u3}} {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : ι -> (Subsemigroup.{u2} N _inst_2)), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (iSup.{u1, succ u3} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1))) ι (fun (i : ι) => Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (S i)))) (iSup.{u2, succ u3} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.completeLattice.{u2} N _inst_2))) ι S))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u3} N] {ι : Type.{u1}} {f : MulHom.{u2, u3} M N _inst_1 _inst_2}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MulHom.{u2, u3} 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 u3, u2, u3} (MulHom.{u2, u3} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u3} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} N _inst_2)), Eq.{succ u3} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.map.{u2, u3} M N _inst_1 _inst_2 f (iSup.{u2, succ u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => Subsemigroup.comap.{u2, u3} M N _inst_1 _inst_2 f (S i)))) (iSup.{u3, succ u1} (Subsemigroup.{u3} N _inst_2) (CompleteLattice.toSupSet.{u3} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u3} N _inst_2)) ι S))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.map_supr_comap_of_surjective Subsemigroup.map_iSup_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_iSup_comap_of_surjective (S : ι → Subsemigroup N) :
     (⨆ i, (S i).comap f).map f = iSup S :=
@@ -774,24 +522,12 @@ theorem map_iSup_comap_of_surjective (S : ι → Subsemigroup N) :
 #align subsemigroup.map_supr_comap_of_surjective Subsemigroup.map_iSup_comap_of_surjective
 #align add_subsemigroup.map_supr_comap_of_surjective AddSubsemigroup.map_iSup_comap_of_surjective
 
-/- warning: subsemigroup.comap_le_comap_iff_of_surjective -> Subsemigroup.comap_le_comap_iff_of_surjective is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall {S : Subsemigroup.{u2} N _inst_2} {T : Subsemigroup.{u2} N _inst_2}, Iff (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T)) (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) S T))
-but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (forall {S : Subsemigroup.{u2} N _inst_2} {T : Subsemigroup.{u2} N _inst_2}, Iff (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T)) (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toLE.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2))))) S T))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_le_comap_iff_of_surjective Subsemigroup.comap_le_comap_iff_of_surjectiveₓ'. -/
 @[to_additive]
 theorem comap_le_comap_iff_of_surjective {S T : Subsemigroup N} : S.comap f ≤ T.comap f ↔ S ≤ T :=
   (giMapComap hf).u_le_u_iff
 #align subsemigroup.comap_le_comap_iff_of_surjective Subsemigroup.comap_le_comap_iff_of_surjective
 #align add_subsemigroup.comap_le_comap_iff_of_surjective AddSubsemigroup.comap_le_comap_iff_of_surjective
 
-/- warning: subsemigroup.comap_strict_mono_of_surjective -> Subsemigroup.comap_strictMono_of_surjective is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (StrictMono.{u2, u1} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2))) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f))
-but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (StrictMono.{u2, u1} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)))) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_strict_mono_of_surjective Subsemigroup.comap_strictMono_of_surjectiveₓ'. -/
 @[to_additive]
 theorem comap_strictMono_of_surjective : StrictMono (comap f) :=
   (giMapComap hf).strictMono_u
@@ -818,12 +554,6 @@ instance (priority := 900) mul : Mul S' :=
 #align add_mem_class.has_add AddMemClass.add
 -/
 
-/- warning: mul_mem_class.coe_mul -> MulMemClass.coe_mul is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : SetLike.{u2, u1} A M] [hA : MulMemClass.{u2, u1} A M _inst_1 _inst_2] (S' : A) (x : coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') (y : coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S'), 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_2) S') M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (coeBase.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_2) x S'))))) (HMul.hMul.{u1, u1, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') (instHMul.{u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') (MulMemClass.mul.{u1, u2} M A _inst_1 _inst_2 hA S')) x y)) (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_1) ((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_2) S') M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (coeBase.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_2) x S'))))) x) ((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_2) S') M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (coeBase.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_2) x S'))))) y))
-but is expected to have type
-  forall {M : Type.{u2}} {A : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : SetLike.{u1, u2} A M] [hA : MulMemClass.{u1, u2} A M _inst_1 _inst_2] (S' : A) (x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) (y : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')), 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_2 S')) (HMul.hMul.{u2, u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) (instHMul.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) (MulMemClass.mul.{u2, u1} M A _inst_1 _inst_2 hA S')) x y)) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) (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_2 S')) x) (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_2 S')) y))
-Case conversion may be inaccurate. Consider using '#align mul_mem_class.coe_mul MulMemClass.coe_mulₓ'. -/
 -- lower priority so later simp lemmas are used first; to appease simp_nf
 @[simp, norm_cast, to_additive]
 theorem coe_mul (x y : S') : (↑(x * y) : M) = ↑x * ↑y :=
@@ -831,12 +561,6 @@ theorem coe_mul (x y : S') : (↑(x * y) : M) = ↑x * ↑y :=
 #align mul_mem_class.coe_mul MulMemClass.coe_mul
 #align add_mem_class.coe_add AddMemClass.coe_add
 
-/- warning: mul_mem_class.mk_mul_mk -> MulMemClass.mk_mul_mk is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : SetLike.{u2, u1} A M] [hA : MulMemClass.{u2, u1} A M _inst_1 _inst_2] (S' : A) (x : M) (y : M) (hx : Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_2) x S') (hy : Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_2) y S'), Eq.{succ u1} (Subtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_2) x S')) (HMul.hMul.{u1, u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_2) x S')) (Subtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_2) x S')) (Subtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_2) x S')) (instHMul.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_2) x S')) (MulMemClass.mul.{u1, u2} M A _inst_1 _inst_2 hA S')) (Subtype.mk.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_2) x S') x hx) (Subtype.mk.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_2) x S') y hy)) (Subtype.mk.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_2) x S') (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_1) x y) (MulMemClass.mul_mem.{u2, u1} A M _inst_1 _inst_2 hA S' x y hx hy))
-but is expected to have type
-  forall {M : Type.{u2}} {A : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : SetLike.{u1, u2} A M] [hA : MulMemClass.{u1, u2} A M _inst_1 _inst_2] (S' : A) (x : M) (y : M) (hx : Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S') (hy : Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) y S'), Eq.{succ u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) (HMul.hMul.{u2, u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) (instHMul.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) (MulMemClass.mul.{u2, u1} M A _inst_1 _inst_2 hA S')) (Subtype.mk.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S') x hx) (Subtype.mk.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S') y hy)) (Subtype.mk.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S') (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y) (MulMemClass.mul_mem.{u1, u2} A M _inst_1 _inst_2 hA S' x y hx hy))
-Case conversion may be inaccurate. Consider using '#align mul_mem_class.mk_mul_mk MulMemClass.mk_mul_mkₓ'. -/
 -- lower priority so later simp lemmas are used first; to appease simp_nf
 @[simp, to_additive]
 theorem mk_mul_mk (x y : M) (hx : x ∈ S') (hy : y ∈ S') :
@@ -845,12 +569,6 @@ theorem mk_mul_mk (x y : M) (hx : x ∈ S') (hy : y ∈ S') :
 #align mul_mem_class.mk_mul_mk MulMemClass.mk_mul_mk
 #align add_mem_class.mk_add_mk AddMemClass.mk_add_mk
 
-/- warning: mul_mem_class.mul_def -> MulMemClass.mul_def is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : SetLike.{u2, u1} A M] [hA : MulMemClass.{u2, u1} A M _inst_1 _inst_2] (S' : A) (x : coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') (y : coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S'), Eq.{succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') (HMul.hMul.{u1, u1, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') (instHMul.{u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') (MulMemClass.mul.{u1, u2} M A _inst_1 _inst_2 hA S')) x y) (Subtype.mk.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_2) x S') (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_1) ((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_2) S') M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (coeBase.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_2) x S'))))) x) ((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_2) S') M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (coeBase.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_2) x S'))))) y)) (MulMemClass.mul_mem.{u2, u1} A M _inst_1 _inst_2 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_2) S') M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (coeBase.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_2) x S'))))) x) ((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_2) S') M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (coeBase.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_2) x S'))))) y) (Subtype.property.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_2) x S') x) (Subtype.property.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_2) x S') y)))
-but is expected to have type
-  forall {M : Type.{u2}} {A : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : SetLike.{u1, u2} A M] [hA : MulMemClass.{u1, u2} A M _inst_1 _inst_2] (S' : A) (x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) (y : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')), Eq.{succ u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) (HMul.hMul.{u2, u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) (instHMul.{u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) (MulMemClass.mul.{u2, u1} M A _inst_1 _inst_2 hA S')) x y) (Subtype.mk.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S') (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) (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_2 S')) x) (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_2 S')) y)) (MulMemClass.mul_mem.{u1, u2} A M _inst_1 _inst_2 hA S' (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_2 S')) x) (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_2 S')) y) (Subtype.property.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S') x) (Subtype.property.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S') y)))
-Case conversion may be inaccurate. Consider using '#align mul_mem_class.mul_def MulMemClass.mul_defₓ'. -/
 @[to_additive]
 theorem mul_def (x y : S') : x * y = ⟨x * y, mul_mem x.2 y.2⟩ :=
   rfl
@@ -859,12 +577,6 @@ theorem mul_def (x y : S') : x * y = ⟨x * y, mul_mem x.2 y.2⟩ :=
 
 omit hA
 
-/- warning: mul_mem_class.to_semigroup -> MulMemClass.toSemigroup is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_3 : Semigroup.{u1} M] {A : Type.{u2}} [_inst_4 : SetLike.{u2, u1} A M] [_inst_5 : MulMemClass.{u2, u1} A M (Semigroup.toHasMul.{u1} M _inst_3) _inst_4] (S : A), Semigroup.{u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S)
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_3 : Semigroup.{u1} M] {A : Type.{u2}} [_inst_4 : SetLike.{u2, u1} A M] [_inst_5 : MulMemClass.{u2, u1} A M (Semigroup.toMul.{u1} M _inst_3) _inst_4] (S : A), Semigroup.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M A (SetLike.instMembership.{u2, u1} A M _inst_4) x S))
-Case conversion may be inaccurate. Consider using '#align mul_mem_class.to_semigroup MulMemClass.toSemigroupₓ'. -/
 /-- A subsemigroup of a semigroup inherits a semigroup structure. -/
 @[to_additive "An `add_subsemigroup` of an `add_semigroup` inherits an `add_semigroup` structure."]
 instance toSemigroup {M : Type _} [Semigroup M] {A : Type _} [SetLike A M] [MulMemClass A M]
@@ -873,12 +585,6 @@ instance toSemigroup {M : Type _} [Semigroup M] {A : Type _} [SetLike A M] [MulM
 #align mul_mem_class.to_semigroup MulMemClass.toSemigroup
 #align add_mem_class.to_add_semigroup AddMemClass.toAddSemigroup
 
-/- warning: mul_mem_class.to_comm_semigroup -> MulMemClass.toCommSemigroup is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_3 : CommSemigroup.{u1} M] {A : Type.{u2}} [_inst_4 : SetLike.{u2, u1} A M] [_inst_5 : MulMemClass.{u2, u1} A M (Semigroup.toHasMul.{u1} M (CommSemigroup.toSemigroup.{u1} M _inst_3)) _inst_4] (S : A), CommSemigroup.{u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_4) S)
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_3 : CommSemigroup.{u1} M] {A : Type.{u2}} [_inst_4 : SetLike.{u2, u1} A M] [_inst_5 : MulMemClass.{u2, u1} A M (Semigroup.toMul.{u1} M (CommSemigroup.toSemigroup.{u1} M _inst_3)) _inst_4] (S : A), CommSemigroup.{u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u2} M A (SetLike.instMembership.{u2, u1} A M _inst_4) x S))
-Case conversion may be inaccurate. Consider using '#align mul_mem_class.to_comm_semigroup MulMemClass.toCommSemigroupₓ'. -/
 /-- A subsemigroup of a `comm_semigroup` is a `comm_semigroup`. -/
 @[to_additive "An `add_subsemigroup` of an `add_comm_semigroup` is an `add_comm_semigroup`."]
 instance toCommSemigroup {M} [CommSemigroup M] {A : Type _} [SetLike A M] [MulMemClass A M]
@@ -898,12 +604,6 @@ def subtype : S' →ₙ* M :=
 #align add_mem_class.subtype AddMemClass.subtype
 -/
 
-/- warning: mul_mem_class.coe_subtype -> MulMemClass.coe_subtype is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : SetLike.{u2, u1} A M] [hA : MulMemClass.{u2, u1} A M _inst_1 _inst_2] (S' : A), Eq.{succ u1} ((fun (_x : MulHom.{u1, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (MulMemClass.mul.{u1, u2} M A _inst_1 _inst_2 hA S') _inst_1) => (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') -> M) (MulMemClass.subtype.{u1, u2} M A _inst_1 _inst_2 hA S')) (coeFn.{succ u1, succ u1} (MulHom.{u1, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (MulMemClass.mul.{u1, u2} M A _inst_1 _inst_2 hA S') _inst_1) (fun (_x : MulHom.{u1, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (MulMemClass.mul.{u1, u2} M A _inst_1 _inst_2 hA S') _inst_1) => (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') -> M) (MulHom.hasCoeToFun.{u1, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (MulMemClass.mul.{u1, u2} M A _inst_1 _inst_2 hA S') _inst_1) (MulMemClass.subtype.{u1, u2} M A _inst_1 _inst_2 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_2) S') M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (coeBase.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_2) x S'))))))
-but is expected to have type
-  forall {M : Type.{u2}} {A : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : SetLike.{u1, u2} A M] [hA : MulMemClass.{u1, u2} A M _inst_1 _inst_2] (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_2) 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_2) x S')) => M) a) (FunLike.coe.{succ u2, succ u2, succ u2} (MulHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) M (MulMemClass.mul.{u2, u1} M A _inst_1 _inst_2 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) 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_2) x S')) => M) _x) (MulHomClass.toFunLike.{u2, u2, u2} (MulHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) M (MulMemClass.mul.{u2, u1} M A _inst_1 _inst_2 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) M (MulMemClass.mul.{u2, u1} M A _inst_1 _inst_2 hA S') _inst_1 (MulHom.mulHomClass.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) M (MulMemClass.mul.{u2, u1} M A _inst_1 _inst_2 hA S') _inst_1)) (MulMemClass.subtype.{u2, u1} M A _inst_1 _inst_2 hA S')) (Subtype.val.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S'))
-Case conversion may be inaccurate. Consider using '#align mul_mem_class.coe_subtype MulMemClass.coe_subtypeₓ'. -/
 @[simp, to_additive]
 theorem coe_subtype : (MulMemClass.subtype S' : S' → M) = coe :=
   rfl
@@ -948,9 +648,6 @@ noncomputable def equivMapOfInjective (f : M →ₙ* N) (hf : Function.Injective
 #align add_subsemigroup.equiv_map_of_injective AddSubsemigroup.equivMapOfInjective
 -/
 
-/- warning: subsemigroup.coe_equiv_map_of_injective_apply -> Subsemigroup.coe_equivMapOfInjective_apply is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align subsemigroup.coe_equiv_map_of_injective_apply Subsemigroup.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 :=
@@ -985,12 +682,6 @@ def prod (s : Subsemigroup M) (t : Subsemigroup N) : Subsemigroup (M × N)
 #align add_subsemigroup.prod AddSubsemigroup.prod
 -/
 
-/- warning: subsemigroup.coe_prod -> Subsemigroup.coe_prod is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (s : Subsemigroup.{u1} M _inst_1) (t : Subsemigroup.{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) (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{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)} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{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)} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{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} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)) (Prod.{u1, u2} M N) (Subsemigroup.setLike.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2))))) (Subsemigroup.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) (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) s) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Subsemigroup.{u2} N _inst_2) (Set.{u2} N) (HasLiftT.mk.{succ u2, succ u2} (Subsemigroup.{u2} N _inst_2) (Set.{u2} N) (CoeTCₓ.coe.{succ u2, succ u2} (Subsemigroup.{u2} N _inst_2) (Set.{u2} N) (SetLike.Set.hasCoeT.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) t))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (s : Subsemigroup.{u2} M _inst_1) (t : Subsemigroup.{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} (Subsemigroup.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)) (Prod.{u2, u1} M N) (Subsemigroup.instSetLikeSubsemigroup.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)) (Subsemigroup.prod.{u2, u1} M N _inst_1 _inst_2 s t)) (Set.prod.{u2, u1} M N (SetLike.coe.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) s) (SetLike.coe.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) t))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.coe_prod Subsemigroup.coe_prodₓ'. -/
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
 @[to_additive coe_prod]
 theorem coe_prod (s : Subsemigroup M) (t : Subsemigroup N) : (s.Prod t : Set (M × N)) = s ×ˢ t :=
@@ -998,12 +689,6 @@ theorem coe_prod (s : Subsemigroup M) (t : Subsemigroup N) : (s.Prod t : Set (M
 #align subsemigroup.coe_prod Subsemigroup.coe_prod
 #align add_subsemigroup.coe_prod AddSubsemigroup.coe_prod
 
-/- warning: subsemigroup.mem_prod -> Subsemigroup.mem_prod is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {s : Subsemigroup.{u1} M _inst_1} {t : Subsemigroup.{u2} N _inst_2} {p : Prod.{u1, u2} M N}, Iff (Membership.Mem.{max u1 u2, max u1 u2} (Prod.{u1, u2} M N) (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)) (SetLike.hasMem.{max u1 u2, max u1 u2} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)) (Prod.{u1, u2} M N) (Subsemigroup.setLike.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2))) p (Subsemigroup.prod.{u1, u2} M N _inst_1 _inst_2 s t)) (And (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) (Prod.fst.{u1, u2} M N p) s) (Membership.Mem.{u2, u2} N (Subsemigroup.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.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 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {s : Subsemigroup.{u2} M _inst_1} {t : Subsemigroup.{u1} N _inst_2} {p : Prod.{u2, u1} M N}, Iff (Membership.mem.{max u2 u1, max u2 u1} (Prod.{u2, u1} M N) (Subsemigroup.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)) (SetLike.instMembership.{max u2 u1, max u2 u1} (Subsemigroup.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)) (Prod.{u2, u1} M N) (Subsemigroup.instSetLikeSubsemigroup.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2))) p (Subsemigroup.prod.{u2, u1} M N _inst_1 _inst_2 s t)) (And (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) (Prod.fst.{u2, u1} M N p) s) (Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) (Prod.snd.{u2, u1} M N p) t))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.mem_prod Subsemigroup.mem_prodₓ'. -/
 @[to_additive mem_prod]
 theorem mem_prod {s : Subsemigroup M} {t : Subsemigroup N} {p : M × N} :
     p ∈ s.Prod t ↔ p.1 ∈ s ∧ p.2 ∈ t :=
@@ -1011,12 +696,6 @@ theorem mem_prod {s : Subsemigroup M} {t : Subsemigroup N} {p : M × N} :
 #align subsemigroup.mem_prod Subsemigroup.mem_prod
 #align add_subsemigroup.mem_prod AddSubsemigroup.mem_prod
 
-/- warning: subsemigroup.prod_mono -> Subsemigroup.prod_mono is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {s₁ : Subsemigroup.{u1} M _inst_1} {s₂ : Subsemigroup.{u1} M _inst_1} {t₁ : Subsemigroup.{u2} N _inst_2} {t₂ : Subsemigroup.{u2} N _inst_2}, (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) s₁ s₂) -> (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) t₁ t₂) -> (LE.le.{max u1 u2} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)) (Preorder.toHasLe.{max u1 u2} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u1 u2} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)) (SetLike.partialOrder.{max u1 u2, max u1 u2} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)) (Prod.{u1, u2} M N) (Subsemigroup.setLike.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2))))) (Subsemigroup.prod.{u1, u2} M N _inst_1 _inst_2 s₁ t₁) (Subsemigroup.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 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {s₁ : Subsemigroup.{u2} M _inst_1} {s₂ : Subsemigroup.{u2} M _inst_1} {t₁ : Subsemigroup.{u1} N _inst_2} {t₂ : Subsemigroup.{u1} N _inst_2}, (LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1))))) s₁ s₂) -> (LE.le.{u1} (Subsemigroup.{u1} N _inst_2) (Preorder.toLE.{u1} (Subsemigroup.{u1} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2))))) t₁ t₂) -> (LE.le.{max u2 u1} (Subsemigroup.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)) (Preorder.toLE.{max u2 u1} (Subsemigroup.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u2 u1} (Subsemigroup.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)) (CompleteSemilatticeInf.toPartialOrder.{max u2 u1} (Subsemigroup.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)) (CompleteLattice.toCompleteSemilatticeInf.{max u2 u1} (Subsemigroup.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)) (Subsemigroup.instCompleteLatticeSubsemigroup.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)))))) (Subsemigroup.prod.{u2, u1} M N _inst_1 _inst_2 s₁ t₁) (Subsemigroup.prod.{u2, u1} M N _inst_1 _inst_2 s₂ t₂))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.prod_mono Subsemigroup.prod_monoₓ'. -/
 @[to_additive prod_mono]
 theorem prod_mono {s₁ s₂ : Subsemigroup M} {t₁ t₂ : Subsemigroup N} (hs : s₁ ≤ s₂) (ht : t₁ ≤ t₂) :
     s₁.Prod t₁ ≤ s₂.Prod t₂ :=
@@ -1024,12 +703,6 @@ theorem prod_mono {s₁ s₂ : Subsemigroup M} {t₁ t₂ : Subsemigroup N} (hs
 #align subsemigroup.prod_mono Subsemigroup.prod_mono
 #align add_subsemigroup.prod_mono AddSubsemigroup.prod_mono
 
-/- warning: subsemigroup.prod_top -> Subsemigroup.prod_top is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (s : Subsemigroup.{u1} M _inst_1), Eq.{succ (max u1 u2)} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)) (Subsemigroup.prod.{u1, u2} M N _inst_1 _inst_2 s (Top.top.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasTop.{u2} N _inst_2))) (Subsemigroup.comap.{max u1 u2, u1} (Prod.{u1, u2} M N) M (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2) _inst_1 (MulHom.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 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (s : Subsemigroup.{u2} M _inst_1), Eq.{max (succ u2) (succ u1)} (Subsemigroup.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)) (Subsemigroup.prod.{u2, u1} M N _inst_1 _inst_2 s (Top.top.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instTopSubsemigroup.{u1} N _inst_2))) (Subsemigroup.comap.{max u2 u1, u2} (Prod.{u2, u1} M N) M (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2) _inst_1 (MulHom.fst.{u2, u1} M N _inst_1 _inst_2) s)
-Case conversion may be inaccurate. Consider using '#align subsemigroup.prod_top Subsemigroup.prod_topₓ'. -/
 @[to_additive prod_top]
 theorem prod_top (s : Subsemigroup M) : s.Prod (⊤ : Subsemigroup N) = s.comap (MulHom.fst M N) :=
   ext fun x => by simp [mem_prod, MulHom.coe_fst]
@@ -1044,24 +717,12 @@ theorem top_prod (s : Subsemigroup N) : (⊤ : Subsemigroup M).Prod s = s.comap
 #align add_subsemigroup.top_prod AddSubsemigroup.top_prod
 -/
 
-/- warning: subsemigroup.top_prod_top -> Subsemigroup.top_prod_top is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N], Eq.{succ (max u1 u2)} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)) (Subsemigroup.prod.{u1, u2} M N _inst_1 _inst_2 (Top.top.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasTop.{u1} M _inst_1)) (Top.top.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasTop.{u2} N _inst_2))) (Top.top.{max u1 u2} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)) (Subsemigroup.hasTop.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N], Eq.{max (succ u2) (succ u1)} (Subsemigroup.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)) (Subsemigroup.prod.{u2, u1} M N _inst_1 _inst_2 (Top.top.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instTopSubsemigroup.{u2} M _inst_1)) (Top.top.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instTopSubsemigroup.{u1} N _inst_2))) (Top.top.{max u2 u1} (Subsemigroup.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)) (Subsemigroup.instTopSubsemigroup.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.top_prod_top Subsemigroup.top_prod_topₓ'. -/
 @[simp, to_additive top_prod_top]
 theorem top_prod_top : (⊤ : Subsemigroup M).Prod (⊤ : Subsemigroup N) = ⊤ :=
   (top_prod _).trans <| comap_top _
 #align subsemigroup.top_prod_top Subsemigroup.top_prod_top
 #align add_subsemigroup.top_prod_top AddSubsemigroup.top_prod_top
 
-/- warning: subsemigroup.bot_prod_bot -> Subsemigroup.bot_prod_bot is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N], Eq.{succ (max u1 u2)} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)) (Subsemigroup.prod.{u1, u2} M N _inst_1 _inst_2 (Bot.bot.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasBot.{u1} M _inst_1)) (Bot.bot.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasBot.{u2} N _inst_2))) (Bot.bot.{max u1 u2} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)) (Subsemigroup.hasBot.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N], Eq.{max (succ u2) (succ u1)} (Subsemigroup.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)) (Subsemigroup.prod.{u2, u1} M N _inst_1 _inst_2 (Bot.bot.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instBotSubsemigroup.{u2} M _inst_1)) (Bot.bot.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instBotSubsemigroup.{u1} N _inst_2))) (Bot.bot.{max u2 u1} (Subsemigroup.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)) (Subsemigroup.instBotSubsemigroup.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.bot_prod_bot Subsemigroup.bot_prod_botₓ'. -/
 @[to_additive]
 theorem bot_prod_bot : (⊥ : Subsemigroup M).Prod (⊥ : Subsemigroup N) = ⊥ :=
   SetLike.coe_injective <| by simp [coe_prod, Prod.one_eq_mk]
@@ -1080,12 +741,6 @@ def prodEquiv (s : Subsemigroup M) (t : Subsemigroup N) : s.Prod t ≃* s × t :
 
 open MulHom
 
-/- warning: subsemigroup.mem_map_equiv -> Subsemigroup.mem_map_equiv is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulEquiv.{u1, u2} M N _inst_1 _inst_2} {K : Subsemigroup.{u1} M _inst_1} {x : N}, Iff (Membership.Mem.{u2, u2} N (Subsemigroup.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) x (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 (MulEquiv.toMulHom.{u1, u2} M N _inst_1 _inst_2 f) K)) (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} N M _inst_2 _inst_1) (fun (_x : MulEquiv.{u2, u1} N M _inst_2 _inst_1) => N -> M) (MulEquiv.hasCoeToFun.{u2, u1} N M _inst_2 _inst_1) (MulEquiv.symm.{u1, u2} M N _inst_1 _inst_2 f) x) K)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulEquiv.{u2, u1} M N _inst_1 _inst_2} {K : Subsemigroup.{u2} M _inst_1} {x : N}, Iff (Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 (MulEquiv.toMulHom.{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) (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M _inst_2 _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 _inst_2 _inst_1) N M (EquivLike.toEmbeddingLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M _inst_2 _inst_1) N M (MulEquivClass.toEquivLike.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} N M _inst_2 _inst_1) N M _inst_2 _inst_1 (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M _inst_2 _inst_1)))) (MulEquiv.symm.{u2, u1} M N _inst_1 _inst_2 f) x) K)
-Case conversion may be inaccurate. Consider using '#align subsemigroup.mem_map_equiv Subsemigroup.mem_map_equivₓ'. -/
 @[to_additive]
 theorem mem_map_equiv {f : M ≃* N} {K : Subsemigroup M} {x : N} :
     x ∈ K.map f.toMulHom ↔ f.symm x ∈ K :=
@@ -1093,12 +748,6 @@ theorem mem_map_equiv {f : M ≃* N} {K : Subsemigroup M} {x : N} :
 #align subsemigroup.mem_map_equiv Subsemigroup.mem_map_equiv
 #align add_subsemigroup.mem_map_equiv AddSubsemigroup.mem_map_equiv
 
-/- warning: subsemigroup.map_equiv_eq_comap_symm -> Subsemigroup.map_equiv_eq_comap_symm is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulEquiv.{u1, u2} M N _inst_1 _inst_2) (K : Subsemigroup.{u1} M _inst_1), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 (MulEquiv.toMulHom.{u1, u2} M N _inst_1 _inst_2 f) K) (Subsemigroup.comap.{u2, u1} N M _inst_2 _inst_1 (MulEquiv.toMulHom.{u2, u1} N M _inst_2 _inst_1 (MulEquiv.symm.{u1, u2} M N _inst_1 _inst_2 f)) K)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulEquiv.{u2, u1} M N _inst_1 _inst_2) (K : Subsemigroup.{u2} M _inst_1), Eq.{succ u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 (MulEquiv.toMulHom.{u2, u1} M N _inst_1 _inst_2 f) K) (Subsemigroup.comap.{u1, u2} N M _inst_2 _inst_1 (MulEquiv.toMulHom.{u1, u2} N M _inst_2 _inst_1 (MulEquiv.symm.{u2, u1} M N _inst_1 _inst_2 f)) K)
-Case conversion may be inaccurate. Consider using '#align subsemigroup.map_equiv_eq_comap_symm Subsemigroup.map_equiv_eq_comap_symmₓ'. -/
 @[to_additive]
 theorem map_equiv_eq_comap_symm (f : M ≃* N) (K : Subsemigroup M) :
     K.map f.toMulHom = K.comap f.symm.toMulHom :=
@@ -1115,24 +764,12 @@ theorem comap_equiv_eq_map_symm (f : N ≃* M) (K : Subsemigroup M) :
 #align add_subsemigroup.comap_equiv_eq_map_symm AddSubsemigroup.comap_equiv_eq_map_symm
 -/
 
-/- warning: subsemigroup.map_equiv_top -> Subsemigroup.map_equiv_top is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulEquiv.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 (MulEquiv.toMulHom.{u1, u2} M N _inst_1 _inst_2 f) (Top.top.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasTop.{u1} M _inst_1))) (Top.top.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasTop.{u2} N _inst_2))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulEquiv.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 (MulEquiv.toMulHom.{u2, u1} M N _inst_1 _inst_2 f) (Top.top.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instTopSubsemigroup.{u2} M _inst_1))) (Top.top.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instTopSubsemigroup.{u1} N _inst_2))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.map_equiv_top Subsemigroup.map_equiv_topₓ'. -/
 @[simp, to_additive]
 theorem map_equiv_top (f : M ≃* N) : (⊤ : Subsemigroup M).map f.toMulHom = ⊤ :=
   SetLike.coe_injective <| Set.image_univ.trans f.Surjective.range_eq
 #align subsemigroup.map_equiv_top Subsemigroup.map_equiv_top
 #align add_subsemigroup.map_equiv_top AddSubsemigroup.map_equiv_top
 
-/- warning: subsemigroup.le_prod_iff -> Subsemigroup.le_prod_iff is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {s : Subsemigroup.{u1} M _inst_1} {t : Subsemigroup.{u2} N _inst_2} {u : Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)}, Iff (LE.le.{max u1 u2} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)) (Preorder.toHasLe.{max u1 u2} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u1 u2} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)) (SetLike.partialOrder.{max u1 u2, max u1 u2} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)) (Prod.{u1, u2} M N) (Subsemigroup.setLike.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2))))) u (Subsemigroup.prod.{u1, u2} M N _inst_1 _inst_2 s t)) (And (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) (Subsemigroup.map.{max u1 u2, u1} (Prod.{u1, u2} M N) M (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2) _inst_1 (MulHom.fst.{u1, u2} M N _inst_1 _inst_2) u) s) (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) (Subsemigroup.map.{max u1 u2, u2} (Prod.{u1, u2} M N) N (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2) _inst_2 (MulHom.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 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {s : Subsemigroup.{u2} M _inst_1} {t : Subsemigroup.{u1} N _inst_2} {u : Subsemigroup.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)}, Iff (LE.le.{max u2 u1} (Subsemigroup.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)) (Preorder.toLE.{max u2 u1} (Subsemigroup.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u2 u1} (Subsemigroup.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)) (CompleteSemilatticeInf.toPartialOrder.{max u2 u1} (Subsemigroup.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)) (CompleteLattice.toCompleteSemilatticeInf.{max u2 u1} (Subsemigroup.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)) (Subsemigroup.instCompleteLatticeSubsemigroup.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)))))) u (Subsemigroup.prod.{u2, u1} M N _inst_1 _inst_2 s t)) (And (LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1))))) (Subsemigroup.map.{max u2 u1, u2} (Prod.{u2, u1} M N) M (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2) _inst_1 (MulHom.fst.{u2, u1} M N _inst_1 _inst_2) u) s) (LE.le.{u1} (Subsemigroup.{u1} N _inst_2) (Preorder.toLE.{u1} (Subsemigroup.{u1} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2))))) (Subsemigroup.map.{max u2 u1, u1} (Prod.{u2, u1} M N) N (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2) _inst_2 (MulHom.snd.{u2, u1} M N _inst_1 _inst_2) u) t))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.le_prod_iff Subsemigroup.le_prod_iffₓ'. -/
 @[to_additive le_prod_iff]
 theorem le_prod_iff {s : Subsemigroup M} {t : Subsemigroup N} {u : Subsemigroup (M × N)} :
     u ≤ s.Prod t ↔ u.map (fst M N) ≤ s ∧ u.map (snd M N) ≤ t :=
@@ -1163,48 +800,24 @@ def srange (f : M →ₙ* N) : Subsemigroup N :=
 #align add_hom.srange AddHom.srange
 -/
 
-/- warning: mul_hom.coe_srange -> MulHom.coe_srange is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u2} (Set.{u2} N) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Subsemigroup.{u2} N _inst_2) (Set.{u2} N) (HasLiftT.mk.{succ u2, succ u2} (Subsemigroup.{u2} N _inst_2) (Set.{u2} N) (CoeTCₓ.coe.{succ u2, succ u2} (Subsemigroup.{u2} N _inst_2) (Set.{u2} N) (SetLike.Set.hasCoeT.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f)) (Set.range.{u2, succ u1} N M (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} (Set.{u1} N) (SetLike.coe.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f)) (Set.range.{u1, succ u2} N M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f))
-Case conversion may be inaccurate. Consider using '#align mul_hom.coe_srange MulHom.coe_srangeₓ'. -/
 @[simp, to_additive]
 theorem coe_srange (f : M →ₙ* N) : (f.srange : Set N) = Set.range f :=
   rfl
 #align mul_hom.coe_srange MulHom.coe_srange
 #align add_hom.coe_srange AddHom.coe_srange
 
-/- warning: mul_hom.mem_srange -> MulHom.mem_srange is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2} {y : N}, Iff (Membership.Mem.{u2, u2} N (Subsemigroup.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) y (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f)) (Exists.{succ u1} M (fun (x : M) => Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) y))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2} {y : N}, Iff (Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) y (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f)) (Exists.{succ u2} M (fun (x : M) => Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) y))
-Case conversion may be inaccurate. Consider using '#align mul_hom.mem_srange MulHom.mem_srangeₓ'. -/
 @[simp, to_additive]
 theorem mem_srange {f : M →ₙ* N} {y : N} : y ∈ f.srange ↔ ∃ x, f x = y :=
   Iff.rfl
 #align mul_hom.mem_srange MulHom.mem_srange
 #align add_hom.mem_srange AddHom.mem_srange
 
-/- warning: mul_hom.srange_eq_map -> MulHom.srange_eq_map is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Top.top.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasTop.{u1} M _inst_1)))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} (Subsemigroup.{u1} N _inst_2) (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f (Top.top.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instTopSubsemigroup.{u2} M _inst_1)))
-Case conversion may be inaccurate. Consider using '#align mul_hom.srange_eq_map MulHom.srange_eq_mapₓ'. -/
 @[to_additive]
 theorem srange_eq_map (f : M →ₙ* N) : f.srange = (⊤ : Subsemigroup M).map f :=
   copy_eq _
 #align mul_hom.srange_eq_map MulHom.srange_eq_map
 #align add_hom.srange_eq_map AddHom.srange_eq_map
 
-/- warning: mul_hom.map_srange -> MulHom.map_srange is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u3} P] (g : MulHom.{u2, u3} N P _inst_2 _inst_3) (f : MulHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u3} (Subsemigroup.{u3} P _inst_3) (Subsemigroup.map.{u2, u3} N P _inst_2 _inst_3 g (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f)) (MulHom.srange.{u1, u3} M P _inst_1 _inst_3 (MulHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f))
-but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u3}} {P : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u3} N] [_inst_3 : Mul.{u2} P] (g : MulHom.{u3, u2} N P _inst_2 _inst_3) (f : MulHom.{u1, u3} M N _inst_1 _inst_2), Eq.{succ u2} (Subsemigroup.{u2} P _inst_3) (Subsemigroup.map.{u3, u2} N P _inst_2 _inst_3 g (MulHom.srange.{u1, u3} M N _inst_1 _inst_2 f)) (MulHom.srange.{u1, u2} M P _inst_1 _inst_3 (MulHom.comp.{u1, u3, u2} M N P _inst_1 _inst_2 _inst_3 g f))
-Case conversion may be inaccurate. Consider using '#align mul_hom.map_srange MulHom.map_srangeₓ'. -/
 @[to_additive]
 theorem map_srange (g : N →ₙ* P) (f : M →ₙ* N) : f.srange.map g = (g.comp f).srange := by
   simpa only [srange_eq_map] using (⊤ : Subsemigroup M).map_map g f
@@ -1230,24 +843,12 @@ theorem srange_top_of_surjective {N} [Mul N] (f : M →ₙ* N) (hf : Function.Su
 #align add_hom.srange_top_of_surjective AddHom.srange_top_of_surjective
 -/
 
-/- warning: mul_hom.mclosure_preimage_le -> MulHom.mclosure_preimage_le is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (s : Set.{u2} N), LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) (Subsemigroup.closure.{u1} M _inst_1 (Set.preimage.{u1, u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) s)) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (Subsemigroup.closure.{u2} N _inst_2 s))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (s : Set.{u1} N), LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1))))) (Subsemigroup.closure.{u2} M _inst_1 (Set.preimage.{u2, u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) s)) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Subsemigroup.closure.{u1} N _inst_2 s))
-Case conversion may be inaccurate. Consider using '#align mul_hom.mclosure_preimage_le MulHom.mclosure_preimage_leₓ'. -/
 @[to_additive]
 theorem mclosure_preimage_le (f : M →ₙ* N) (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 mul_hom.mclosure_preimage_le MulHom.mclosure_preimage_le
 #align add_hom.mclosure_preimage_le AddHom.mclosure_preimage_le
 
-/- warning: mul_hom.map_mclosure -> MulHom.map_mclosure is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (s : Set.{u1} M), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Subsemigroup.closure.{u1} M _inst_1 s)) (Subsemigroup.closure.{u2} N _inst_2 (Set.image.{u1, u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) s))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (s : Set.{u2} M), Eq.{succ u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f (Subsemigroup.closure.{u2} M _inst_1 s)) (Subsemigroup.closure.{u1} N _inst_2 (Set.image.{u2, u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) s))
-Case conversion may be inaccurate. Consider using '#align mul_hom.map_mclosure MulHom.map_mclosureₓ'. -/
 /-- The image under a semigroup hom of the subsemigroup generated by a set equals the subsemigroup
 generated by the image of the set. -/
 @[to_additive
@@ -1307,24 +908,12 @@ theorem coe_srangeRestrict {N} [Mul N] (f : M →ₙ* N) (x : M) : (f.srangeRest
 #align add_hom.coe_srange_restrict AddHom.coe_srangeRestrict
 -/
 
-/- warning: mul_hom.srange_restrict_surjective -> MulHom.srangeRestrict_surjective is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2), Function.Surjective.{succ u1, succ u2} M (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f)) _inst_1 (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f))) (fun (_x : MulHom.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f)) _inst_1 (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f))) => M -> (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f))) (MulHom.hasCoeToFun.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f)) _inst_1 (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f))) (MulHom.srangeRestrict.{u1, u2} M _inst_1 N _inst_2 f))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2), Function.Surjective.{succ u2, succ u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _inst_1 (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{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 (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _inst_1 (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _inst_1 (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f)) (MulHom.mulHomClass.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _inst_1 (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f)))) (MulHom.srangeRestrict.{u2, u1} M _inst_1 N _inst_2 f))
-Case conversion may be inaccurate. Consider using '#align mul_hom.srange_restrict_surjective MulHom.srangeRestrict_surjectiveₓ'. -/
 @[to_additive]
 theorem srangeRestrict_surjective (f : M →ₙ* N) : Function.Surjective f.srangeRestrict :=
   fun ⟨_, ⟨x, rfl⟩⟩ => ⟨x, rfl⟩
 #align mul_hom.srange_restrict_surjective MulHom.srangeRestrict_surjective
 #align add_hom.srange_restrict_surjective AddHom.srangeRestrict_surjective
 
-/- warning: mul_hom.prod_map_comap_prod' -> MulHom.prod_map_comap_prod' is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {M' : Type.{u3}} {N' : Type.{u4}} [_inst_4 : Mul.{u3} M'] [_inst_5 : Mul.{u4} N'] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (g : MulHom.{u3, u4} M' N' _inst_4 _inst_5) (S : Subsemigroup.{u2} N _inst_2) (S' : Subsemigroup.{u4} N' _inst_5), Eq.{succ (max u1 u3)} (Subsemigroup.{max u1 u3} (Prod.{u1, u3} M M') (Prod.hasMul.{u1, u3} M M' _inst_1 _inst_4)) (Subsemigroup.comap.{max u1 u3, max u2 u4} (Prod.{u1, u3} M M') (Prod.{u2, u4} N N') (Prod.hasMul.{u1, u3} M M' _inst_1 _inst_4) (Prod.hasMul.{u2, u4} N N' _inst_2 _inst_5) (MulHom.prodMap.{u1, u3, u2, u4} M M' N N' _inst_1 _inst_4 _inst_2 _inst_5 f g) (Subsemigroup.prod.{u2, u4} N N' _inst_2 _inst_5 S S')) (Subsemigroup.prod.{u1, u3} M M' _inst_1 _inst_4 (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{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 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {M' : Type.{u4}} {N' : Type.{u3}} [_inst_4 : Mul.{u4} M'] [_inst_5 : Mul.{u3} N'] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (g : MulHom.{u4, u3} M' N' _inst_4 _inst_5) (S : Subsemigroup.{u1} N _inst_2) (S' : Subsemigroup.{u3} N' _inst_5), Eq.{max (succ u2) (succ u4)} (Subsemigroup.{max u4 u2} (Prod.{u2, u4} M M') (Prod.instMulProd.{u2, u4} M M' _inst_1 _inst_4)) (Subsemigroup.comap.{max u4 u2, max u3 u1} (Prod.{u2, u4} M M') (Prod.{u1, u3} N N') (Prod.instMulProd.{u2, u4} M M' _inst_1 _inst_4) (Prod.instMulProd.{u1, u3} N N' _inst_2 _inst_5) (MulHom.prodMap.{u2, u4, u1, u3} M M' N N' _inst_1 _inst_4 _inst_2 _inst_5 f g) (Subsemigroup.prod.{u1, u3} N N' _inst_2 _inst_5 S S')) (Subsemigroup.prod.{u2, u4} M M' _inst_1 _inst_4 (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u4, u3} M' N' _inst_4 _inst_5 g S'))
-Case conversion may be inaccurate. Consider using '#align mul_hom.prod_map_comap_prod' MulHom.prod_map_comap_prod'ₓ'. -/
 @[to_additive]
 theorem prod_map_comap_prod' {M' : Type _} {N' : Type _} [Mul M'] [Mul N'] (f : M →ₙ* N)
     (g : M' →ₙ* N') (S : Subsemigroup N) (S' : Subsemigroup N') :
@@ -1358,12 +947,6 @@ def subsemigroupMap (f : M →ₙ* N) (M' : Subsemigroup M) : M' →ₙ* M'.map
 #align add_hom.subsemigroup_map AddHom.subsemigroupMap
 -/
 
-/- warning: mul_hom.subsemigroup_map_surjective -> MulHom.subsemigroupMap_surjective is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (M' : Subsemigroup.{u1} M _inst_1), Function.Surjective.{succ u1, succ u2} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) M') (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f M')) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) M') (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f M')) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M _inst_1) _inst_1 (Subsemigroup.setLike.{u1} M _inst_1) (Subsemigroup.mulMemClass.{u1} M _inst_1) M') (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f M'))) (fun (_x : MulHom.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) M') (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f M')) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M _inst_1) _inst_1 (Subsemigroup.setLike.{u1} M _inst_1) (Subsemigroup.mulMemClass.{u1} M _inst_1) M') (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f M'))) => (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) M') -> (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f M'))) (MulHom.hasCoeToFun.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) M') (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f M')) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M _inst_1) _inst_1 (Subsemigroup.setLike.{u1} M _inst_1) (Subsemigroup.mulMemClass.{u1} M _inst_1) M') (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f M'))) (MulHom.subsemigroupMap.{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 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (M' : Subsemigroup.{u2} M _inst_1), Function.Surjective.{succ u2, succ u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) M') (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) M') (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) M') (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M')) (MulHom.mulHomClass.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) M') (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M')))) (MulHom.subsemigroupMap.{u2, u1} M N _inst_1 _inst_2 f M'))
-Case conversion may be inaccurate. Consider using '#align mul_hom.subsemigroup_map_surjective MulHom.subsemigroupMap_surjectiveₓ'. -/
 @[to_additive]
 theorem subsemigroupMap_surjective (f : M →ₙ* N) (M' : Subsemigroup M) :
     Function.Surjective (f.subsemigroupMap M') := by rintro ⟨_, x, hx, rfl⟩; exact ⟨⟨x, hx⟩, rfl⟩
@@ -1386,24 +969,12 @@ theorem srange_fst [Nonempty N] : (fst M N).srange = ⊤ :=
 #align add_subsemigroup.srange_fst AddSubsemigroup.srange_fst
 -/
 
-/- warning: subsemigroup.srange_snd -> Subsemigroup.srange_snd is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] [_inst_4 : Nonempty.{succ u1} M], Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (MulHom.srange.{max u1 u2, u2} (Prod.{u1, u2} M N) N (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2) _inst_2 (MulHom.snd.{u1, u2} M N _inst_1 _inst_2)) (Top.top.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasTop.{u2} N _inst_2))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] [_inst_4 : Nonempty.{succ u2} M], Eq.{succ u1} (Subsemigroup.{u1} N _inst_2) (MulHom.srange.{max u2 u1, u1} (Prod.{u2, u1} M N) N (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2) _inst_2 (MulHom.snd.{u2, u1} M N _inst_1 _inst_2)) (Top.top.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instTopSubsemigroup.{u1} N _inst_2))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.srange_snd Subsemigroup.srange_sndₓ'. -/
 @[simp, to_additive]
 theorem srange_snd [Nonempty M] : (snd M N).srange = ⊤ :=
   (snd M N).srange_top_of_surjective <| Prod.snd_surjective
 #align subsemigroup.srange_snd Subsemigroup.srange_snd
 #align add_subsemigroup.srange_snd AddSubsemigroup.srange_snd
 
-/- warning: subsemigroup.prod_eq_top_iff -> Subsemigroup.prod_eq_top_iff is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] [_inst_4 : Nonempty.{succ u1} M] [_inst_5 : Nonempty.{succ u2} N] {s : Subsemigroup.{u1} M _inst_1} {t : Subsemigroup.{u2} N _inst_2}, Iff (Eq.{succ (max u1 u2)} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)) (Subsemigroup.prod.{u1, u2} M N _inst_1 _inst_2 s t) (Top.top.{max u1 u2} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)) (Subsemigroup.hasTop.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)))) (And (Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) s (Top.top.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasTop.{u1} M _inst_1))) (Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) t (Top.top.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasTop.{u2} N _inst_2))))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] [_inst_4 : Nonempty.{succ u2} M] [_inst_5 : Nonempty.{succ u1} N] {s : Subsemigroup.{u2} M _inst_1} {t : Subsemigroup.{u1} N _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (Subsemigroup.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)) (Subsemigroup.prod.{u2, u1} M N _inst_1 _inst_2 s t) (Top.top.{max u2 u1} (Subsemigroup.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)) (Subsemigroup.instTopSubsemigroup.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)))) (And (Eq.{succ u2} (Subsemigroup.{u2} M _inst_1) s (Top.top.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instTopSubsemigroup.{u2} M _inst_1))) (Eq.{succ u1} (Subsemigroup.{u1} N _inst_2) t (Top.top.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instTopSubsemigroup.{u1} N _inst_2))))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.prod_eq_top_iff Subsemigroup.prod_eq_top_iffₓ'. -/
 @[to_additive]
 theorem prod_eq_top_iff [Nonempty M] [Nonempty N] {s : Subsemigroup M} {t : Subsemigroup N} :
     s.Prod t = ⊤ ↔ s = ⊤ ∧ t = ⊤ := by
@@ -1412,12 +983,6 @@ theorem prod_eq_top_iff [Nonempty M] [Nonempty N] {s : Subsemigroup M} {t : Subs
 #align subsemigroup.prod_eq_top_iff Subsemigroup.prod_eq_top_iff
 #align add_subsemigroup.sum_eq_top_iff AddSubsemigroup.prod_eq_top_iff
 
-/- warning: subsemigroup.inclusion -> Subsemigroup.inclusion is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Subsemigroup.{u1} M _inst_1} {T : Subsemigroup.{u1} M _inst_1}, (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) S T) -> (MulHom.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) T) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M _inst_1) _inst_1 (Subsemigroup.setLike.{u1} M _inst_1) (Subsemigroup.mulMemClass.{u1} M _inst_1) S) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M _inst_1) _inst_1 (Subsemigroup.setLike.{u1} M _inst_1) (Subsemigroup.mulMemClass.{u1} M _inst_1) T))
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Subsemigroup.{u1} M _inst_1} {T : Subsemigroup.{u1} M _inst_1}, (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) S T) -> (MulHom.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) x S)) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) x T)) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} M _inst_1) S) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} M _inst_1) T))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.inclusion Subsemigroup.inclusionₓ'. -/
 /-- The semigroup hom associated to an inclusion of subsemigroups. -/
 @[to_additive "The `add_semigroup` hom associated to an inclusion of subsemigroups."]
 def inclusion {S T : Subsemigroup M} (h : S ≤ T) : S →ₙ* T :=
Diff
@@ -1140,12 +1140,9 @@ theorem le_prod_iff {s : Subsemigroup M} {t : Subsemigroup N} {u : Subsemigroup
   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 subsemigroup.le_prod_iff Subsemigroup.le_prod_iff
 #align add_subsemigroup.le_prod_iff AddSubsemigroup.le_prod_iff
 
@@ -1369,10 +1366,7 @@ but is expected to have type
 Case conversion may be inaccurate. Consider using '#align mul_hom.subsemigroup_map_surjective MulHom.subsemigroupMap_surjectiveₓ'. -/
 @[to_additive]
 theorem subsemigroupMap_surjective (f : M →ₙ* N) (M' : Subsemigroup M) :
-    Function.Surjective (f.subsemigroupMap M') :=
-  by
-  rintro ⟨_, x, hx, rfl⟩
-  exact ⟨⟨x, hx⟩, rfl⟩
+    Function.Surjective (f.subsemigroupMap M') := by rintro ⟨_, x, hx, rfl⟩; exact ⟨⟨x, hx⟩, rfl⟩
 #align mul_hom.subsemigroup_map_surjective MulHom.subsemigroupMap_surjective
 #align add_hom.subsemigroup_map_surjective AddHom.subsemigroupMap_surjective
 
Diff
@@ -116,10 +116,7 @@ abbrev AddSubsemigroup.toSubsemigroup' : AddSubsemigroup (Additive M) ≃o Subse
 #align add_subsemigroup.to_subsemigroup' AddSubsemigroup.toSubsemigroup'
 
 /- warning: subsemigroup.to_add_subsemigroup_closure -> Subsemigroup.toAddSubsemigroup_closure is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] (S : Set.{u1} M), Eq.{succ u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)))))) (fun (_x : RelIso.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))))) (LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1))))))) => (Subsemigroup.{u1} M _inst_1) -> (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1))) (RelIso.hasCoeToFun.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))))) (LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1))))))) (Subsemigroup.toAddSubsemigroup.{u1} M _inst_1) (Subsemigroup.closure.{u1} M _inst_1 S)) (AddSubsemigroup.closure.{u1} (Additive.{u1} M) (Additive.hasAdd.{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 : Mul.{u1} M] (S : Set.{u1} M), Eq.{succ u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{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 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) (Subsemigroup.{u1} M _inst_1) (fun (_x : Subsemigroup.{u1} M _inst_1) => AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{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 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{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 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302) (RelIso.instRelHomClassRelIso.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{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 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302))) (Subsemigroup.toAddSubsemigroup.{u1} M _inst_1) (Subsemigroup.closure.{u1} M _inst_1 S)) (AddSubsemigroup.closure.{u1} (Additive.{u1} M) (Additive.add.{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 subsemigroup.to_add_subsemigroup_closure Subsemigroup.toAddSubsemigroup_closureₓ'. -/
 theorem Subsemigroup.toAddSubsemigroup_closure (S : Set M) :
     (Subsemigroup.closure S).toAddSubsemigroup = AddSubsemigroup.closure (Additive.toMul ⁻¹' S) :=
@@ -130,10 +127,7 @@ theorem Subsemigroup.toAddSubsemigroup_closure (S : Set M) :
 #align subsemigroup.to_add_subsemigroup_closure Subsemigroup.toAddSubsemigroup_closure
 
 /- warning: add_subsemigroup.to_subsemigroup'_closure -> AddSubsemigroup.toSubsemigroup'_closure is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] (S : Set.{u1} (Additive.{u1} M)), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1))))) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))))) (fun (_x : RelIso.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)))))) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))))) => (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) -> (Subsemigroup.{u1} M _inst_1)) (RelIso.hasCoeToFun.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)))))) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))))) (AddSubsemigroup.toSubsemigroup'.{u1} M _inst_1) (AddSubsemigroup.closure.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1) S)) (Subsemigroup.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 : Mul.{u1} M] (S : Set.{u1} (Additive.{u1} M)), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{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 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (fun (_x : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => Subsemigroup.{u1} M _inst_1) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{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 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{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 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302) (RelIso.instRelHomClassRelIso.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{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 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302))) (AddSubsemigroup.toSubsemigroup'.{u1} M _inst_1) (AddSubsemigroup.closure.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1) S)) (Subsemigroup.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_subsemigroup.to_subsemigroup'_closure AddSubsemigroup.toSubsemigroup'_closureₓ'. -/
 theorem AddSubsemigroup.toSubsemigroup'_closure (S : Set (Additive M)) :
     (AddSubsemigroup.closure S).toSubsemigroup' =
@@ -185,10 +179,7 @@ abbrev Subsemigroup.toAddSubsemigroup' : Subsemigroup (Multiplicative A) ≃o Ad
 #align subsemigroup.to_add_subsemigroup' Subsemigroup.toAddSubsemigroup'
 
 /- warning: add_subsemigroup.to_subsemigroup_closure -> AddSubsemigroup.toSubsemigroup_closure is a dubious translation:
-lean 3 declaration is
-  forall {A : Type.{u1}} [_inst_1 : Add.{u1} A] (S : Set.{u1} A), Eq.{succ u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1)))) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)))))) (fun (_x : RelIso.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1))))) (LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1))))))) => (AddSubsemigroup.{u1} A _inst_1) -> (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1))) (RelIso.hasCoeToFun.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1))))) (LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1))))))) (AddSubsemigroup.toSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.closure.{u1} A _inst_1 S)) (Subsemigroup.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1) (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_1 : Add.{u1} A] (S : Set.{u1} A), Eq.{succ u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) (AddSubsemigroup.{u1} A _inst_1) (fun (_x : AddSubsemigroup.{u1} A _inst_1) => Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302) (RelIso.instRelHomClassRelIso.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302))) (AddSubsemigroup.toSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.closure.{u1} A _inst_1 S)) (Subsemigroup.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1) (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_subsemigroup.to_subsemigroup_closure AddSubsemigroup.toSubsemigroup_closureₓ'. -/
 theorem AddSubsemigroup.toSubsemigroup_closure (S : Set A) :
     (AddSubsemigroup.closure S).toSubsemigroup =
@@ -200,10 +191,7 @@ theorem AddSubsemigroup.toSubsemigroup_closure (S : Set A) :
 #align add_subsemigroup.to_subsemigroup_closure AddSubsemigroup.toSubsemigroup_closure
 
 /- warning: subsemigroup.to_add_subsemigroup'_closure -> Subsemigroup.toAddSubsemigroup'_closure is a dubious translation:
-lean 3 declaration is
-  forall {A : Type.{u1}} [_inst_1 : Add.{u1} A] (S : Set.{u1} (Multiplicative.{u1} A)), Eq.{succ u1} (AddSubsemigroup.{u1} A _inst_1) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1))))) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1))))) (fun (_x : RelIso.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)))))) (LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1)))))) => (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) -> (AddSubsemigroup.{u1} A _inst_1)) (RelIso.hasCoeToFun.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)))))) (LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1)))))) (Subsemigroup.toAddSubsemigroup'.{u1} A _inst_1) (Subsemigroup.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1) S)) (AddSubsemigroup.closure.{u1} A _inst_1 (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_1 : Add.{u1} A] (S : Set.{u1} (Multiplicative.{u1} A)), Eq.{succ u1} (AddSubsemigroup.{u1} A _inst_1) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (fun (_x : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => AddSubsemigroup.{u1} A _inst_1) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302) (RelIso.instRelHomClassRelIso.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302))) (Subsemigroup.toAddSubsemigroup'.{u1} A _inst_1) (Subsemigroup.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1) S)) (AddSubsemigroup.closure.{u1} A _inst_1 (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 subsemigroup.to_add_subsemigroup'_closure Subsemigroup.toAddSubsemigroup'_closureₓ'. -/
 theorem Subsemigroup.toAddSubsemigroup'_closure (S : Set (Multiplicative A)) :
     (Subsemigroup.closure S).toAddSubsemigroup' = AddSubsemigroup.closure (Additive.ofMul ⁻¹' S) :=
@@ -961,10 +949,7 @@ noncomputable def equivMapOfInjective (f : M →ₙ* N) (hf : Function.Injective
 -/
 
 /- warning: subsemigroup.coe_equiv_map_of_injective_apply -> Subsemigroup.coe_equivMapOfInjective_apply is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (S : Subsemigroup.{u1} M _inst_1) (f : MulHom.{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)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) (x : coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.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)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Subsemigroup.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) x (Subsemigroup.map.{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)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M _inst_1) _inst_1 (Subsemigroup.setLike.{u1} M _inst_1) (Subsemigroup.mulMemClass.{u1} M _inst_1) S) (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S))) (fun (_x : MulEquiv.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M _inst_1) _inst_1 (Subsemigroup.setLike.{u1} M _inst_1) (Subsemigroup.mulMemClass.{u1} M _inst_1) S) (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S))) => (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) -> (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S))) (MulEquiv.hasCoeToFun.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M _inst_1) _inst_1 (Subsemigroup.setLike.{u1} M _inst_1) (Subsemigroup.mulMemClass.{u1} M _inst_1) S) (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S))) (Subsemigroup.equivMapOfInjective.{u1, u2} M N _inst_1 _inst_2 S f hf) x)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x S))))) x))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (S : Subsemigroup.{u2} M _inst_1) (f : MulHom.{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} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) (x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{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} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)))))) (Subsemigroup.equivMapOfInjective.{u2, u1} M N _inst_1 _inst_2 S f hf) x)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f (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} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) S)) x))
+<too large>
 Case conversion may be inaccurate. Consider using '#align subsemigroup.coe_equiv_map_of_injective_apply Subsemigroup.coe_equivMapOfInjective_applyₓ'. -/
 @[simp, to_additive]
 theorem coe_equivMapOfInjective_apply (f : M →ₙ* N) (hf : Function.Injective f) (x : S) :
Diff
@@ -119,7 +119,7 @@ abbrev AddSubsemigroup.toSubsemigroup' : AddSubsemigroup (Additive M) ≃o Subse
 lean 3 declaration is
   forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] (S : Set.{u1} M), Eq.{succ u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)))))) (fun (_x : RelIso.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))))) (LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1))))))) => (Subsemigroup.{u1} M _inst_1) -> (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1))) (RelIso.hasCoeToFun.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))))) (LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1))))))) (Subsemigroup.toAddSubsemigroup.{u1} M _inst_1) (Subsemigroup.closure.{u1} M _inst_1 S)) (AddSubsemigroup.closure.{u1} (Additive.{u1} M) (Additive.hasAdd.{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 : Mul.{u1} M] (S : Set.{u1} M), Eq.{succ u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{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 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (Subsemigroup.{u1} M _inst_1) (fun (_x : Subsemigroup.{u1} M _inst_1) => AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{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 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{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 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.instRelHomClassRelIso.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{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 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298))) (Subsemigroup.toAddSubsemigroup.{u1} M _inst_1) (Subsemigroup.closure.{u1} M _inst_1 S)) (AddSubsemigroup.closure.{u1} (Additive.{u1} M) (Additive.add.{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 : Mul.{u1} M] (S : Set.{u1} M), Eq.{succ u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{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 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) (Subsemigroup.{u1} M _inst_1) (fun (_x : Subsemigroup.{u1} M _inst_1) => AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{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 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{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 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302) (RelIso.instRelHomClassRelIso.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{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 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302))) (Subsemigroup.toAddSubsemigroup.{u1} M _inst_1) (Subsemigroup.closure.{u1} M _inst_1 S)) (AddSubsemigroup.closure.{u1} (Additive.{u1} M) (Additive.add.{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 subsemigroup.to_add_subsemigroup_closure Subsemigroup.toAddSubsemigroup_closureₓ'. -/
 theorem Subsemigroup.toAddSubsemigroup_closure (S : Set M) :
     (Subsemigroup.closure S).toAddSubsemigroup = AddSubsemigroup.closure (Additive.toMul ⁻¹' S) :=
@@ -133,7 +133,7 @@ theorem Subsemigroup.toAddSubsemigroup_closure (S : Set M) :
 lean 3 declaration is
   forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] (S : Set.{u1} (Additive.{u1} M)), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1))))) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))))) (fun (_x : RelIso.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)))))) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))))) => (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) -> (Subsemigroup.{u1} M _inst_1)) (RelIso.hasCoeToFun.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)))))) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))))) (AddSubsemigroup.toSubsemigroup'.{u1} M _inst_1) (AddSubsemigroup.closure.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1) S)) (Subsemigroup.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 : Mul.{u1} M] (S : Set.{u1} (Additive.{u1} M)), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{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 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (fun (_x : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => Subsemigroup.{u1} M _inst_1) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{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 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{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 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.instRelHomClassRelIso.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{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 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298))) (AddSubsemigroup.toSubsemigroup'.{u1} M _inst_1) (AddSubsemigroup.closure.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1) S)) (Subsemigroup.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 : Mul.{u1} M] (S : Set.{u1} (Additive.{u1} M)), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{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 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (fun (_x : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => Subsemigroup.{u1} M _inst_1) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{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 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{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 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302) (RelIso.instRelHomClassRelIso.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{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 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302))) (AddSubsemigroup.toSubsemigroup'.{u1} M _inst_1) (AddSubsemigroup.closure.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1) S)) (Subsemigroup.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_subsemigroup.to_subsemigroup'_closure AddSubsemigroup.toSubsemigroup'_closureₓ'. -/
 theorem AddSubsemigroup.toSubsemigroup'_closure (S : Set (Additive M)) :
     (AddSubsemigroup.closure S).toSubsemigroup' =
@@ -188,7 +188,7 @@ abbrev Subsemigroup.toAddSubsemigroup' : Subsemigroup (Multiplicative A) ≃o Ad
 lean 3 declaration is
   forall {A : Type.{u1}} [_inst_1 : Add.{u1} A] (S : Set.{u1} A), Eq.{succ u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1)))) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)))))) (fun (_x : RelIso.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1))))) (LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1))))))) => (AddSubsemigroup.{u1} A _inst_1) -> (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1))) (RelIso.hasCoeToFun.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1))))) (LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1))))))) (AddSubsemigroup.toSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.closure.{u1} A _inst_1 S)) (Subsemigroup.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1) (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_1 : Add.{u1} A] (S : Set.{u1} A), Eq.{succ u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (AddSubsemigroup.{u1} A _inst_1) (fun (_x : AddSubsemigroup.{u1} A _inst_1) => Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.instRelHomClassRelIso.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298))) (AddSubsemigroup.toSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.closure.{u1} A _inst_1 S)) (Subsemigroup.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1) (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_1 : Add.{u1} A] (S : Set.{u1} A), Eq.{succ u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) (AddSubsemigroup.{u1} A _inst_1) (fun (_x : AddSubsemigroup.{u1} A _inst_1) => Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302) (RelIso.instRelHomClassRelIso.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302))) (AddSubsemigroup.toSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.closure.{u1} A _inst_1 S)) (Subsemigroup.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1) (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_subsemigroup.to_subsemigroup_closure AddSubsemigroup.toSubsemigroup_closureₓ'. -/
 theorem AddSubsemigroup.toSubsemigroup_closure (S : Set A) :
     (AddSubsemigroup.closure S).toSubsemigroup =
@@ -203,7 +203,7 @@ theorem AddSubsemigroup.toSubsemigroup_closure (S : Set A) :
 lean 3 declaration is
   forall {A : Type.{u1}} [_inst_1 : Add.{u1} A] (S : Set.{u1} (Multiplicative.{u1} A)), Eq.{succ u1} (AddSubsemigroup.{u1} A _inst_1) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1))))) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1))))) (fun (_x : RelIso.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)))))) (LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1)))))) => (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) -> (AddSubsemigroup.{u1} A _inst_1)) (RelIso.hasCoeToFun.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)))))) (LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1)))))) (Subsemigroup.toAddSubsemigroup'.{u1} A _inst_1) (Subsemigroup.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1) S)) (AddSubsemigroup.closure.{u1} A _inst_1 (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_1 : Add.{u1} A] (S : Set.{u1} (Multiplicative.{u1} A)), Eq.{succ u1} (AddSubsemigroup.{u1} A _inst_1) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (fun (_x : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => AddSubsemigroup.{u1} A _inst_1) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.instRelHomClassRelIso.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298))) (Subsemigroup.toAddSubsemigroup'.{u1} A _inst_1) (Subsemigroup.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1) S)) (AddSubsemigroup.closure.{u1} A _inst_1 (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_1 : Add.{u1} A] (S : Set.{u1} (Multiplicative.{u1} A)), Eq.{succ u1} (AddSubsemigroup.{u1} A _inst_1) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (fun (_x : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => AddSubsemigroup.{u1} A _inst_1) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302)) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302) (RelIso.instRelHomClassRelIso.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1285 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1287 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1285 x._@.Mathlib.Order.Hom.Basic._hyg.1287) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1300 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1302 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1300 x._@.Mathlib.Order.Hom.Basic._hyg.1302))) (Subsemigroup.toAddSubsemigroup'.{u1} A _inst_1) (Subsemigroup.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1) S)) (AddSubsemigroup.closure.{u1} A _inst_1 (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 subsemigroup.to_add_subsemigroup'_closure Subsemigroup.toAddSubsemigroup'_closureₓ'. -/
 theorem Subsemigroup.toAddSubsemigroup'_closure (S : Set (Multiplicative A)) :
     (Subsemigroup.closure S).toAddSubsemigroup' = AddSubsemigroup.closure (Additive.ofMul ⁻¹' S) :=
@@ -289,7 +289,7 @@ def map (f : M →ₙ* N) (S : Subsemigroup M) : Subsemigroup N
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (S : Subsemigroup.{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) (Subsemigroup.{u2} N _inst_2) (Set.{u2} N) (HasLiftT.mk.{succ u2, succ u2} (Subsemigroup.{u2} N _inst_2) (Set.{u2} N) (CoeTCₓ.coe.{succ u2, succ u2} (Subsemigroup.{u2} N _inst_2) (Set.{u2} N) (SetLike.Set.hasCoeT.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) (Set.image.{u1, u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) S))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (S : Subsemigroup.{u2} M _inst_1), Eq.{succ u1} (Set.{u1} N) (SetLike.coe.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)) (Set.image.{u2, u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) (SetLike.coe.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) S))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (S : Subsemigroup.{u2} M _inst_1), Eq.{succ u1} (Set.{u1} N) (SetLike.coe.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)) (Set.image.{u2, u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) (SetLike.coe.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) S))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.coe_map Subsemigroup.coe_mapₓ'. -/
 @[simp, to_additive]
 theorem coe_map (f : M →ₙ* N) (S : Subsemigroup M) : (S.map f : Set N) = f '' S :=
@@ -301,7 +301,7 @@ theorem coe_map (f : M →ₙ* N) (S : Subsemigroup M) : (S.map f : Set N) = f '
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2} {S : Subsemigroup.{u1} M _inst_1} {y : N}, Iff (Membership.Mem.{u2, u2} N (Subsemigroup.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) y (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) (Exists.{succ u1} M (fun (x : M) => Exists.{0} (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x S) (fun (H : Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x S) => Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) y)))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2} {S : Subsemigroup.{u2} M _inst_1} {y : N}, Iff (Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) y (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)) (Exists.{succ u2} M (fun (x : M) => And (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S) (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) y)))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2} {S : Subsemigroup.{u2} M _inst_1} {y : N}, Iff (Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) y (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)) (Exists.{succ u2} M (fun (x : M) => And (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S) (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) y)))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.mem_map Subsemigroup.mem_mapₓ'. -/
 @[simp, to_additive]
 theorem mem_map {f : M →ₙ* N} {S : Subsemigroup M} {y : N} : y ∈ S.map f ↔ ∃ x ∈ S, f x = y :=
@@ -313,7 +313,7 @@ theorem mem_map {f : M →ₙ* N} {S : Subsemigroup M} {y : N} : y ∈ S.map f 
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) {S : Subsemigroup.{u1} M _inst_1} {x : M}, (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x S) -> (Membership.Mem.{u2, u2} N (Subsemigroup.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (Subsemigroup.map.{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 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) {S : Subsemigroup.{u2} M _inst_1} {x : M}, (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S) -> (Membership.mem.{u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) {S : Subsemigroup.{u2} M _inst_1} {x : M}, (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S) -> (Membership.mem.{u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.mem_map_of_mem Subsemigroup.mem_map_of_memₓ'. -/
 @[to_additive]
 theorem mem_map_of_mem (f : M →ₙ* N) {S : Subsemigroup M} {x : M} (hx : x ∈ S) : f x ∈ S.map f :=
@@ -325,7 +325,7 @@ theorem mem_map_of_mem (f : M →ₙ* N) {S : Subsemigroup M} {x : M} (hx : x 
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (S : Subsemigroup.{u1} M _inst_1) (x : coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S), Membership.Mem.{u2, u2} N (Subsemigroup.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x S))))) x)) (Subsemigroup.map.{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 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (S : Subsemigroup.{u2} M _inst_1) (x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)), Membership.mem.{u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (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} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) S)) x)) (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f (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} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) S)) x)) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (S : Subsemigroup.{u2} M _inst_1) (x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)), Membership.mem.{u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (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} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) S)) x)) (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f (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} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) S)) x)) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)
 Case conversion may be inaccurate. Consider using '#align subsemigroup.apply_coe_mem_map Subsemigroup.apply_coe_mem_mapₓ'. -/
 @[to_additive]
 theorem apply_coe_mem_map (f : M →ₙ* N) (S : Subsemigroup M) (x : S) : f x ∈ S.map f :=
@@ -349,7 +349,7 @@ theorem map_map (g : N →ₙ* P) (f : M →ₙ* N) : (S.map f).map g = S.map (g
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall {S : Subsemigroup.{u1} M _inst_1} {x : M}, Iff (Membership.Mem.{u2, u2} N (Subsemigroup.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x S))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall {S : Subsemigroup.{u2} M _inst_1} {x : M}, Iff (Membership.mem.{u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)) (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall {S : Subsemigroup.{u2} M _inst_1} {x : M}, Iff (Membership.mem.{u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)) (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.mem_map_iff_mem Subsemigroup.mem_map_iff_memₓ'. -/
 @[to_additive]
 theorem mem_map_iff_mem {f : M →ₙ* N} (hf : Function.Injective f) {S : Subsemigroup M} {x : M} :
@@ -568,7 +568,7 @@ include hf
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (GaloisCoinsertion.{u1, u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (GaloisCoinsertion.{u1, u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (GaloisCoinsertion.{u1, u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.gci_map_comap Subsemigroup.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. "]
@@ -581,7 +581,7 @@ def gciMapComap : GaloisCoinsertion (map f) (comap f) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : Subsemigroup.{u1} M _inst_1), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) S)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} M _inst_1), Eq.{succ u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)) S)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} M _inst_1), Eq.{succ u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)) S)
 Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_map_eq_of_injective Subsemigroup.comap_map_eq_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_map_eq_of_injective (S : Subsemigroup M) : (S.map f).comap f = S :=
@@ -601,7 +601,7 @@ theorem comap_surjective_of_injective : Function.Surjective (comap f) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (Function.Injective.{succ u1, succ u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (Function.Injective.{succ u2, succ u1} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (Function.Injective.{succ u2, succ u1} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.map_injective_of_injective Subsemigroup.map_injective_of_injectiveₓ'. -/
 @[to_additive]
 theorem map_injective_of_injective : Function.Injective (map f) :=
@@ -613,7 +613,7 @@ theorem map_injective_of_injective : Function.Injective (map f) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : Subsemigroup.{u1} M _inst_1) (T : Subsemigroup.{u1} M _inst_1), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (Inf.inf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasInf.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f T))) (Inf.inf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasInf.{u1} M _inst_1) S T))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} M _inst_1) (T : Subsemigroup.{u2} M _inst_1), Eq.{succ u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Inf.inf.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instInfSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f T))) (Inf.inf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instInfSubsemigroup.{u2} M _inst_1) S T))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} M _inst_1) (T : Subsemigroup.{u2} M _inst_1), Eq.{succ u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Inf.inf.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instInfSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f T))) (Inf.inf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instInfSubsemigroup.{u2} M _inst_1) S T))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_inf_map_of_injective Subsemigroup.comap_inf_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_inf_map_of_injective (S T : Subsemigroup M) : (S.map f ⊓ T.map f).comap f = S ⊓ T :=
@@ -625,7 +625,7 @@ theorem comap_inf_map_of_injective (S T : Subsemigroup M) : (S.map f ⊓ T.map f
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u3}} {f : MulHom.{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)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : ι -> (Subsemigroup.{u1} M _inst_1)), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (iInf.{u2, succ u3} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasInf.{u2} N _inst_2) ι (fun (i : ι) => Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (S i)))) (iInf.{u1, succ u3} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasInf.{u1} M _inst_1) ι S))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u1}} {f : MulHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} M _inst_1)), Eq.{succ u3} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.comap.{u3, u2} M N _inst_1 _inst_2 f (iInf.{u2, succ u1} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instInfSetSubsemigroup.{u2} N _inst_2) ι (fun (i : ι) => Subsemigroup.map.{u3, u2} M N _inst_1 _inst_2 f (S i)))) (iInf.{u3, succ u1} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.instInfSetSubsemigroup.{u3} M _inst_1) ι S))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u1}} {f : MulHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} M _inst_1)), Eq.{succ u3} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.comap.{u3, u2} M N _inst_1 _inst_2 f (iInf.{u2, succ u1} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instInfSetSubsemigroup.{u2} N _inst_2) ι (fun (i : ι) => Subsemigroup.map.{u3, u2} M N _inst_1 _inst_2 f (S i)))) (iInf.{u3, succ u1} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.instInfSetSubsemigroup.{u3} M _inst_1) ι S))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_infi_map_of_injective Subsemigroup.comap_iInf_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_iInf_map_of_injective (S : ι → Subsemigroup M) :
@@ -638,7 +638,7 @@ theorem comap_iInf_map_of_injective (S : ι → Subsemigroup M) :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : Subsemigroup.{u1} M _inst_1) (T : Subsemigroup.{u1} M _inst_1), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (Sup.sup.{u2} (Subsemigroup.{u2} N _inst_2) (SemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.completeLattice.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f T))) (Sup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1)))) S T))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} M _inst_1) (T : Subsemigroup.{u2} M _inst_1), Eq.{succ u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Sup.sup.{u1} (Subsemigroup.{u1} N _inst_2) (SemilatticeSup.toSup.{u1} (Subsemigroup.{u1} N _inst_2) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2)))) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f T))) (Sup.sup.{u2} (Subsemigroup.{u2} M _inst_1) (SemilatticeSup.toSup.{u2} (Subsemigroup.{u2} M _inst_1) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)))) S T))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} M _inst_1) (T : Subsemigroup.{u2} M _inst_1), Eq.{succ u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Sup.sup.{u1} (Subsemigroup.{u1} N _inst_2) (SemilatticeSup.toSup.{u1} (Subsemigroup.{u1} N _inst_2) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2)))) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f T))) (Sup.sup.{u2} (Subsemigroup.{u2} M _inst_1) (SemilatticeSup.toSup.{u2} (Subsemigroup.{u2} M _inst_1) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)))) S T))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_sup_map_of_injective Subsemigroup.comap_sup_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_sup_map_of_injective (S T : Subsemigroup M) : (S.map f ⊔ T.map f).comap f = S ⊔ T :=
@@ -650,7 +650,7 @@ theorem comap_sup_map_of_injective (S T : Subsemigroup M) : (S.map f ⊔ T.map f
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u3}} {f : MulHom.{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)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : ι -> (Subsemigroup.{u1} M _inst_1)), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (iSup.{u2, succ u3} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.completeLattice.{u2} N _inst_2))) ι (fun (i : ι) => Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (S i)))) (iSup.{u1, succ u3} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1))) ι S))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u1}} {f : MulHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} M _inst_1)), Eq.{succ u3} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.comap.{u3, u2} M N _inst_1 _inst_2 f (iSup.{u2, succ u1} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)) ι (fun (i : ι) => Subsemigroup.map.{u3, u2} M N _inst_1 _inst_2 f (S i)))) (iSup.{u3, succ u1} (Subsemigroup.{u3} M _inst_1) (CompleteLattice.toSupSet.{u3} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u3} M _inst_1)) ι S))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u1}} {f : MulHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} M _inst_1)), Eq.{succ u3} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.comap.{u3, u2} M N _inst_1 _inst_2 f (iSup.{u2, succ u1} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)) ι (fun (i : ι) => Subsemigroup.map.{u3, u2} M N _inst_1 _inst_2 f (S i)))) (iSup.{u3, succ u1} (Subsemigroup.{u3} M _inst_1) (CompleteLattice.toSupSet.{u3} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u3} M _inst_1)) ι S))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_supr_map_of_injective Subsemigroup.comap_iSup_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_iSup_map_of_injective (S : ι → Subsemigroup M) :
@@ -663,7 +663,7 @@ theorem comap_iSup_map_of_injective (S : ι → Subsemigroup M) :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall {S : Subsemigroup.{u1} M _inst_1} {T : Subsemigroup.{u1} M _inst_1}, Iff (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f T)) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) S T))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall {S : Subsemigroup.{u2} M _inst_1} {T : Subsemigroup.{u2} M _inst_1}, Iff (LE.le.{u1} (Subsemigroup.{u1} N _inst_2) (Preorder.toLE.{u1} (Subsemigroup.{u1} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2))))) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f T)) (LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1))))) S T))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall {S : Subsemigroup.{u2} M _inst_1} {T : Subsemigroup.{u2} M _inst_1}, Iff (LE.le.{u1} (Subsemigroup.{u1} N _inst_2) (Preorder.toLE.{u1} (Subsemigroup.{u1} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2))))) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f T)) (LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1))))) S T))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.map_le_map_iff_of_injective Subsemigroup.map_le_map_iff_of_injectiveₓ'. -/
 @[to_additive]
 theorem map_le_map_iff_of_injective {S T : Subsemigroup M} : S.map f ≤ T.map f ↔ S ≤ T :=
@@ -675,7 +675,7 @@ theorem map_le_map_iff_of_injective {S T : Subsemigroup M} : S.map f ≤ T.map f
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (StrictMono.{u1, u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (StrictMono.{u2, u1} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.{u1} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)))) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2)))) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (StrictMono.{u2, u1} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.{u1} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)))) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2)))) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.map_strict_mono_of_injective Subsemigroup.map_strictMono_of_injectiveₓ'. -/
 @[to_additive]
 theorem map_strictMono_of_injective : StrictMono (map f) :=
@@ -695,7 +695,7 @@ include hf
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (GaloisInsertion.{u1, u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (GaloisInsertion.{u1, u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (GaloisInsertion.{u1, u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.gi_map_comap Subsemigroup.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. "]
@@ -718,7 +718,7 @@ theorem map_comap_eq_of_surjective (S : Subsemigroup N) : (S.comap f).map f = S
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (Function.Surjective.{succ u1, succ u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Surjective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (Function.Surjective.{succ u2, succ u1} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Surjective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (Function.Surjective.{succ u2, succ u1} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.map_surjective_of_surjective Subsemigroup.map_surjective_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_surjective_of_surjective : Function.Surjective (map f) :=
@@ -738,7 +738,7 @@ theorem comap_injective_of_surjective : Function.Injective (comap f) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Inf.inf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasInf.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))) (Inf.inf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasInf.{u2} N _inst_2) S T))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Inf.inf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instInfSubsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))) (Inf.inf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instInfSubsemigroup.{u2} N _inst_2) S T))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Inf.inf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instInfSubsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))) (Inf.inf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instInfSubsemigroup.{u2} N _inst_2) S T))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.map_inf_comap_of_surjective Subsemigroup.map_inf_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_inf_comap_of_surjective (S T : Subsemigroup N) :
@@ -751,7 +751,7 @@ theorem map_inf_comap_of_surjective (S T : Subsemigroup N) :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u3}} {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : ι -> (Subsemigroup.{u2} N _inst_2)), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (iInf.{u1, succ u3} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasInf.{u1} M _inst_1) ι (fun (i : ι) => Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (S i)))) (iInf.{u2, succ u3} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasInf.{u2} N _inst_2) ι S))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u3} N] {ι : Type.{u1}} {f : MulHom.{u2, u3} M N _inst_1 _inst_2}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MulHom.{u2, u3} 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 u3, u2, u3} (MulHom.{u2, u3} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u3} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} N _inst_2)), Eq.{succ u3} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.map.{u2, u3} M N _inst_1 _inst_2 f (iInf.{u2, succ u1} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instInfSetSubsemigroup.{u2} M _inst_1) ι (fun (i : ι) => Subsemigroup.comap.{u2, u3} M N _inst_1 _inst_2 f (S i)))) (iInf.{u3, succ u1} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.instInfSetSubsemigroup.{u3} N _inst_2) ι S))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u3} N] {ι : Type.{u1}} {f : MulHom.{u2, u3} M N _inst_1 _inst_2}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MulHom.{u2, u3} 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 u3, u2, u3} (MulHom.{u2, u3} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u3} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} N _inst_2)), Eq.{succ u3} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.map.{u2, u3} M N _inst_1 _inst_2 f (iInf.{u2, succ u1} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instInfSetSubsemigroup.{u2} M _inst_1) ι (fun (i : ι) => Subsemigroup.comap.{u2, u3} M N _inst_1 _inst_2 f (S i)))) (iInf.{u3, succ u1} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.instInfSetSubsemigroup.{u3} N _inst_2) ι S))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.map_infi_comap_of_surjective Subsemigroup.map_iInf_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_iInf_comap_of_surjective (S : ι → Subsemigroup N) :
@@ -764,7 +764,7 @@ theorem map_iInf_comap_of_surjective (S : ι → Subsemigroup N) :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Sup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1)))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))) (Sup.sup.{u2} (Subsemigroup.{u2} N _inst_2) (SemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.completeLattice.{u2} N _inst_2)))) S T))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Sup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))) (Sup.sup.{u2} (Subsemigroup.{u2} N _inst_2) (SemilatticeSup.toSup.{u2} (Subsemigroup.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)))) S T))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Sup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))) (Sup.sup.{u2} (Subsemigroup.{u2} N _inst_2) (SemilatticeSup.toSup.{u2} (Subsemigroup.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)))) S T))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.map_sup_comap_of_surjective Subsemigroup.map_sup_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_sup_comap_of_surjective (S T : Subsemigroup N) :
@@ -777,7 +777,7 @@ theorem map_sup_comap_of_surjective (S T : Subsemigroup N) :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u3}} {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : ι -> (Subsemigroup.{u2} N _inst_2)), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (iSup.{u1, succ u3} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1))) ι (fun (i : ι) => Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (S i)))) (iSup.{u2, succ u3} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.completeLattice.{u2} N _inst_2))) ι S))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u3} N] {ι : Type.{u1}} {f : MulHom.{u2, u3} M N _inst_1 _inst_2}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MulHom.{u2, u3} 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 u3, u2, u3} (MulHom.{u2, u3} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u3} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} N _inst_2)), Eq.{succ u3} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.map.{u2, u3} M N _inst_1 _inst_2 f (iSup.{u2, succ u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => Subsemigroup.comap.{u2, u3} M N _inst_1 _inst_2 f (S i)))) (iSup.{u3, succ u1} (Subsemigroup.{u3} N _inst_2) (CompleteLattice.toSupSet.{u3} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u3} N _inst_2)) ι S))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u3} N] {ι : Type.{u1}} {f : MulHom.{u2, u3} M N _inst_1 _inst_2}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MulHom.{u2, u3} 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 u3, u2, u3} (MulHom.{u2, u3} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u3} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} N _inst_2)), Eq.{succ u3} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.map.{u2, u3} M N _inst_1 _inst_2 f (iSup.{u2, succ u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => Subsemigroup.comap.{u2, u3} M N _inst_1 _inst_2 f (S i)))) (iSup.{u3, succ u1} (Subsemigroup.{u3} N _inst_2) (CompleteLattice.toSupSet.{u3} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u3} N _inst_2)) ι S))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.map_supr_comap_of_surjective Subsemigroup.map_iSup_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_iSup_comap_of_surjective (S : ι → Subsemigroup N) :
@@ -790,7 +790,7 @@ theorem map_iSup_comap_of_surjective (S : ι → Subsemigroup N) :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall {S : Subsemigroup.{u2} N _inst_2} {T : Subsemigroup.{u2} N _inst_2}, Iff (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T)) (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) S T))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (forall {S : Subsemigroup.{u2} N _inst_2} {T : Subsemigroup.{u2} N _inst_2}, Iff (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T)) (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toLE.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2))))) S T))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (forall {S : Subsemigroup.{u2} N _inst_2} {T : Subsemigroup.{u2} N _inst_2}, Iff (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T)) (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toLE.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2))))) S T))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_le_comap_iff_of_surjective Subsemigroup.comap_le_comap_iff_of_surjectiveₓ'. -/
 @[to_additive]
 theorem comap_le_comap_iff_of_surjective {S T : Subsemigroup N} : S.comap f ≤ T.comap f ↔ S ≤ T :=
@@ -802,7 +802,7 @@ theorem comap_le_comap_iff_of_surjective {S T : Subsemigroup N} : S.comap f ≤
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (StrictMono.{u2, u1} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2))) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (StrictMono.{u2, u1} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)))) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (StrictMono.{u2, u1} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)))) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_strict_mono_of_surjective Subsemigroup.comap_strictMono_of_surjectiveₓ'. -/
 @[to_additive]
 theorem comap_strictMono_of_surjective : StrictMono (comap f) :=
@@ -914,7 +914,7 @@ def subtype : S' →ₙ* M :=
 lean 3 declaration is
   forall {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : SetLike.{u2, u1} A M] [hA : MulMemClass.{u2, u1} A M _inst_1 _inst_2] (S' : A), Eq.{succ u1} ((fun (_x : MulHom.{u1, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (MulMemClass.mul.{u1, u2} M A _inst_1 _inst_2 hA S') _inst_1) => (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') -> M) (MulMemClass.subtype.{u1, u2} M A _inst_1 _inst_2 hA S')) (coeFn.{succ u1, succ u1} (MulHom.{u1, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (MulMemClass.mul.{u1, u2} M A _inst_1 _inst_2 hA S') _inst_1) (fun (_x : MulHom.{u1, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (MulMemClass.mul.{u1, u2} M A _inst_1 _inst_2 hA S') _inst_1) => (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') -> M) (MulHom.hasCoeToFun.{u1, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (MulMemClass.mul.{u1, u2} M A _inst_1 _inst_2 hA S') _inst_1) (MulMemClass.subtype.{u1, u2} M A _inst_1 _inst_2 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_2) S') M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (coeBase.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_2) x S'))))))
 but is expected to have type
-  forall {M : Type.{u2}} {A : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : SetLike.{u1, u2} A M] [hA : MulMemClass.{u1, u2} A M _inst_1 _inst_2] (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_2) 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_2) x S')) => M) a) (FunLike.coe.{succ u2, succ u2, succ u2} (MulHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) M (MulMemClass.mul.{u2, u1} M A _inst_1 _inst_2 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) 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_2) x S')) => M) _x) (MulHomClass.toFunLike.{u2, u2, u2} (MulHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) M (MulMemClass.mul.{u2, u1} M A _inst_1 _inst_2 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) M (MulMemClass.mul.{u2, u1} M A _inst_1 _inst_2 hA S') _inst_1 (MulHom.mulHomClass.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) M (MulMemClass.mul.{u2, u1} M A _inst_1 _inst_2 hA S') _inst_1)) (MulMemClass.subtype.{u2, u1} M A _inst_1 _inst_2 hA S')) (Subtype.val.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S'))
+  forall {M : Type.{u2}} {A : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : SetLike.{u1, u2} A M] [hA : MulMemClass.{u1, u2} A M _inst_1 _inst_2] (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_2) 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_2) x S')) => M) a) (FunLike.coe.{succ u2, succ u2, succ u2} (MulHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) M (MulMemClass.mul.{u2, u1} M A _inst_1 _inst_2 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) 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_2) x S')) => M) _x) (MulHomClass.toFunLike.{u2, u2, u2} (MulHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) M (MulMemClass.mul.{u2, u1} M A _inst_1 _inst_2 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) M (MulMemClass.mul.{u2, u1} M A _inst_1 _inst_2 hA S') _inst_1 (MulHom.mulHomClass.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) M (MulMemClass.mul.{u2, u1} M A _inst_1 _inst_2 hA S') _inst_1)) (MulMemClass.subtype.{u2, u1} M A _inst_1 _inst_2 hA S')) (Subtype.val.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S'))
 Case conversion may be inaccurate. Consider using '#align mul_mem_class.coe_subtype MulMemClass.coe_subtypeₓ'. -/
 @[simp, to_additive]
 theorem coe_subtype : (MulMemClass.subtype S' : S' → M) = coe :=
@@ -964,7 +964,7 @@ noncomputable def equivMapOfInjective (f : M →ₙ* N) (hf : Function.Injective
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (S : Subsemigroup.{u1} M _inst_1) (f : MulHom.{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)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) (x : coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.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)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Subsemigroup.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) x (Subsemigroup.map.{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)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M _inst_1) _inst_1 (Subsemigroup.setLike.{u1} M _inst_1) (Subsemigroup.mulMemClass.{u1} M _inst_1) S) (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S))) (fun (_x : MulEquiv.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M _inst_1) _inst_1 (Subsemigroup.setLike.{u1} M _inst_1) (Subsemigroup.mulMemClass.{u1} M _inst_1) S) (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S))) => (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) -> (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S))) (MulEquiv.hasCoeToFun.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M _inst_1) _inst_1 (Subsemigroup.setLike.{u1} M _inst_1) (Subsemigroup.mulMemClass.{u1} M _inst_1) S) (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S))) (Subsemigroup.equivMapOfInjective.{u1, u2} M N _inst_1 _inst_2 S f hf) x)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x S))))) x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (S : Subsemigroup.{u2} M _inst_1) (f : MulHom.{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} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) (x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{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} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)))))) (Subsemigroup.equivMapOfInjective.{u2, u1} M N _inst_1 _inst_2 S f hf) x)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f (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} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) S)) x))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (S : Subsemigroup.{u2} M _inst_1) (f : MulHom.{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} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) (x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{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} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)))))) (Subsemigroup.equivMapOfInjective.{u2, u1} M N _inst_1 _inst_2 S f hf) x)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f (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} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) S)) x))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.coe_equiv_map_of_injective_apply Subsemigroup.coe_equivMapOfInjective_applyₓ'. -/
 @[simp, to_additive]
 theorem coe_equivMapOfInjective_apply (f : M →ₙ* N) (hf : Function.Injective f) (x : S) :
@@ -1185,7 +1185,7 @@ def srange (f : M →ₙ* N) : Subsemigroup N :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u2} (Set.{u2} N) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Subsemigroup.{u2} N _inst_2) (Set.{u2} N) (HasLiftT.mk.{succ u2, succ u2} (Subsemigroup.{u2} N _inst_2) (Set.{u2} N) (CoeTCₓ.coe.{succ u2, succ u2} (Subsemigroup.{u2} N _inst_2) (Set.{u2} N) (SetLike.Set.hasCoeT.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f)) (Set.range.{u2, succ u1} N M (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} (Set.{u1} N) (SetLike.coe.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f)) (Set.range.{u1, succ u2} N M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} (Set.{u1} N) (SetLike.coe.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f)) (Set.range.{u1, succ u2} N M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f))
 Case conversion may be inaccurate. Consider using '#align mul_hom.coe_srange MulHom.coe_srangeₓ'. -/
 @[simp, to_additive]
 theorem coe_srange (f : M →ₙ* N) : (f.srange : Set N) = Set.range f :=
@@ -1197,7 +1197,7 @@ theorem coe_srange (f : M →ₙ* N) : (f.srange : Set N) = Set.range f :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2} {y : N}, Iff (Membership.Mem.{u2, u2} N (Subsemigroup.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) y (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f)) (Exists.{succ u1} M (fun (x : M) => Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) y))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2} {y : N}, Iff (Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) y (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f)) (Exists.{succ u2} M (fun (x : M) => Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) y))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2} {y : N}, Iff (Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) y (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f)) (Exists.{succ u2} M (fun (x : M) => Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) y))
 Case conversion may be inaccurate. Consider using '#align mul_hom.mem_srange MulHom.mem_srangeₓ'. -/
 @[simp, to_additive]
 theorem mem_srange {f : M →ₙ* N} {y : N} : y ∈ f.srange ↔ ∃ x, f x = y :=
@@ -1252,7 +1252,7 @@ theorem srange_top_of_surjective {N} [Mul N] (f : M →ₙ* N) (hf : Function.Su
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (s : Set.{u2} N), LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) (Subsemigroup.closure.{u1} M _inst_1 (Set.preimage.{u1, u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) s)) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (Subsemigroup.closure.{u2} N _inst_2 s))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (s : Set.{u1} N), LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1))))) (Subsemigroup.closure.{u2} M _inst_1 (Set.preimage.{u2, u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) s)) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Subsemigroup.closure.{u1} N _inst_2 s))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (s : Set.{u1} N), LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1))))) (Subsemigroup.closure.{u2} M _inst_1 (Set.preimage.{u2, u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) s)) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Subsemigroup.closure.{u1} N _inst_2 s))
 Case conversion may be inaccurate. Consider using '#align mul_hom.mclosure_preimage_le MulHom.mclosure_preimage_leₓ'. -/
 @[to_additive]
 theorem mclosure_preimage_le (f : M →ₙ* N) (s : Set N) : closure (f ⁻¹' s) ≤ (closure s).comap f :=
@@ -1264,7 +1264,7 @@ theorem mclosure_preimage_le (f : M →ₙ* N) (s : Set N) : closure (f ⁻¹' s
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (s : Set.{u1} M), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Subsemigroup.closure.{u1} M _inst_1 s)) (Subsemigroup.closure.{u2} N _inst_2 (Set.image.{u1, u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) s))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (s : Set.{u2} M), Eq.{succ u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f (Subsemigroup.closure.{u2} M _inst_1 s)) (Subsemigroup.closure.{u1} N _inst_2 (Set.image.{u2, u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) s))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (s : Set.{u2} M), Eq.{succ u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f (Subsemigroup.closure.{u2} M _inst_1 s)) (Subsemigroup.closure.{u1} N _inst_2 (Set.image.{u2, u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) s))
 Case conversion may be inaccurate. Consider using '#align mul_hom.map_mclosure MulHom.map_mclosureₓ'. -/
 /-- The image under a semigroup hom of the subsemigroup generated by a set equals the subsemigroup
 generated by the image of the set. -/
@@ -1329,7 +1329,7 @@ theorem coe_srangeRestrict {N} [Mul N] (f : M →ₙ* N) (x : M) : (f.srangeRest
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2), Function.Surjective.{succ u1, succ u2} M (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f)) _inst_1 (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f))) (fun (_x : MulHom.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f)) _inst_1 (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f))) => M -> (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f))) (MulHom.hasCoeToFun.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f)) _inst_1 (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f))) (MulHom.srangeRestrict.{u1, u2} M _inst_1 N _inst_2 f))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2), Function.Surjective.{succ u2, succ u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _inst_1 (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{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 (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _inst_1 (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _inst_1 (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f)) (MulHom.mulHomClass.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _inst_1 (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f)))) (MulHom.srangeRestrict.{u2, u1} M _inst_1 N _inst_2 f))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2), Function.Surjective.{succ u2, succ u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _inst_1 (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{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 (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _inst_1 (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _inst_1 (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f)) (MulHom.mulHomClass.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _inst_1 (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f)))) (MulHom.srangeRestrict.{u2, u1} M _inst_1 N _inst_2 f))
 Case conversion may be inaccurate. Consider using '#align mul_hom.srange_restrict_surjective MulHom.srangeRestrict_surjectiveₓ'. -/
 @[to_additive]
 theorem srangeRestrict_surjective (f : M →ₙ* N) : Function.Surjective f.srangeRestrict :=
@@ -1380,7 +1380,7 @@ def subsemigroupMap (f : M →ₙ* N) (M' : Subsemigroup M) : M' →ₙ* M'.map
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (M' : Subsemigroup.{u1} M _inst_1), Function.Surjective.{succ u1, succ u2} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) M') (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f M')) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) M') (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f M')) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M _inst_1) _inst_1 (Subsemigroup.setLike.{u1} M _inst_1) (Subsemigroup.mulMemClass.{u1} M _inst_1) M') (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f M'))) (fun (_x : MulHom.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) M') (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f M')) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M _inst_1) _inst_1 (Subsemigroup.setLike.{u1} M _inst_1) (Subsemigroup.mulMemClass.{u1} M _inst_1) M') (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f M'))) => (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) M') -> (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f M'))) (MulHom.hasCoeToFun.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) M') (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f M')) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M _inst_1) _inst_1 (Subsemigroup.setLike.{u1} M _inst_1) (Subsemigroup.mulMemClass.{u1} M _inst_1) M') (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f M'))) (MulHom.subsemigroupMap.{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 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (M' : Subsemigroup.{u2} M _inst_1), Function.Surjective.{succ u2, succ u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) M') (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) M') (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) M') (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M')) (MulHom.mulHomClass.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) M') (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M')))) (MulHom.subsemigroupMap.{u2, u1} M N _inst_1 _inst_2 f M'))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (M' : Subsemigroup.{u2} M _inst_1), Function.Surjective.{succ u2, succ u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) M') (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) M') (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) M') (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M')) (MulHom.mulHomClass.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) M') (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M')))) (MulHom.subsemigroupMap.{u2, u1} M N _inst_1 _inst_2 f M'))
 Case conversion may be inaccurate. Consider using '#align mul_hom.subsemigroup_map_surjective MulHom.subsemigroupMap_surjectiveₓ'. -/
 @[to_additive]
 theorem subsemigroupMap_surjective (f : M →ₙ* N) (M' : Subsemigroup M) :
Diff
@@ -84,7 +84,7 @@ variable [Mul M]
 
 /- warning: subsemigroup.to_add_subsemigroup -> Subsemigroup.toAddSubsemigroup is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M], OrderIso.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)))))
+  forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M], OrderIso.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)))))
 but is expected to have type
   forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M], OrderIso.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1))))))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.to_add_subsemigroup Subsemigroup.toAddSubsemigroupₓ'. -/
@@ -105,7 +105,7 @@ def Subsemigroup.toAddSubsemigroup : Subsemigroup M ≃o AddSubsemigroup (Additi
 
 /- warning: add_subsemigroup.to_subsemigroup' -> AddSubsemigroup.toSubsemigroup' is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M], OrderIso.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1))))) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))))
+  forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M], OrderIso.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1))))) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))))
 but is expected to have type
   forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M], OrderIso.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)))))) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))))
 Case conversion may be inaccurate. Consider using '#align add_subsemigroup.to_subsemigroup' AddSubsemigroup.toSubsemigroup'ₓ'. -/
@@ -117,7 +117,7 @@ abbrev AddSubsemigroup.toSubsemigroup' : AddSubsemigroup (Additive M) ≃o Subse
 
 /- warning: subsemigroup.to_add_subsemigroup_closure -> Subsemigroup.toAddSubsemigroup_closure is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] (S : Set.{u1} M), Eq.{succ u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)))))) (fun (_x : RelIso.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))))) (LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1))))))) => (Subsemigroup.{u1} M _inst_1) -> (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1))) (RelIso.hasCoeToFun.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))))) (LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1))))))) (Subsemigroup.toAddSubsemigroup.{u1} M _inst_1) (Subsemigroup.closure.{u1} M _inst_1 S)) (AddSubsemigroup.closure.{u1} (Additive.{u1} M) (Additive.hasAdd.{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 : Mul.{u1} M] (S : Set.{u1} M), Eq.{succ u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)))))) (fun (_x : RelIso.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))))) (LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1))))))) => (Subsemigroup.{u1} M _inst_1) -> (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1))) (RelIso.hasCoeToFun.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))))) (LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1))))))) (Subsemigroup.toAddSubsemigroup.{u1} M _inst_1) (Subsemigroup.closure.{u1} M _inst_1 S)) (AddSubsemigroup.closure.{u1} (Additive.{u1} M) (Additive.hasAdd.{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 : Mul.{u1} M] (S : Set.{u1} M), Eq.{succ u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{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 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (Subsemigroup.{u1} M _inst_1) (fun (_x : Subsemigroup.{u1} M _inst_1) => AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{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 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{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 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.instRelHomClassRelIso.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{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 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298))) (Subsemigroup.toAddSubsemigroup.{u1} M _inst_1) (Subsemigroup.closure.{u1} M _inst_1 S)) (AddSubsemigroup.closure.{u1} (Additive.{u1} M) (Additive.add.{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 subsemigroup.to_add_subsemigroup_closure Subsemigroup.toAddSubsemigroup_closureₓ'. -/
@@ -131,7 +131,7 @@ theorem Subsemigroup.toAddSubsemigroup_closure (S : Set M) :
 
 /- warning: add_subsemigroup.to_subsemigroup'_closure -> AddSubsemigroup.toSubsemigroup'_closure is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] (S : Set.{u1} (Additive.{u1} M)), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1))))) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))))) (fun (_x : RelIso.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)))))) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))))) => (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) -> (Subsemigroup.{u1} M _inst_1)) (RelIso.hasCoeToFun.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)))))) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))))) (AddSubsemigroup.toSubsemigroup'.{u1} M _inst_1) (AddSubsemigroup.closure.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1) S)) (Subsemigroup.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 : Mul.{u1} M] (S : Set.{u1} (Additive.{u1} M)), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1))))) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))))) (fun (_x : RelIso.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)))))) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))))) => (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) -> (Subsemigroup.{u1} M _inst_1)) (RelIso.hasCoeToFun.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)))))) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))))) (AddSubsemigroup.toSubsemigroup'.{u1} M _inst_1) (AddSubsemigroup.closure.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1) S)) (Subsemigroup.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 : Mul.{u1} M] (S : Set.{u1} (Additive.{u1} M)), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{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 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (fun (_x : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => Subsemigroup.{u1} M _inst_1) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{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 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{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 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.instRelHomClassRelIso.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{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 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298))) (AddSubsemigroup.toSubsemigroup'.{u1} M _inst_1) (AddSubsemigroup.closure.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1) S)) (Subsemigroup.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_subsemigroup.to_subsemigroup'_closure AddSubsemigroup.toSubsemigroup'_closureₓ'. -/
@@ -152,7 +152,7 @@ variable {A : Type _} [Add A]
 
 /- warning: add_subsemigroup.to_subsemigroup -> AddSubsemigroup.toSubsemigroup is a dubious translation:
 lean 3 declaration is
-  forall {A : Type.{u1}} [_inst_1 : Add.{u1} A], OrderIso.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1)))) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)))))
+  forall {A : Type.{u1}} [_inst_1 : Add.{u1} A], OrderIso.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1)))) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)))))
 but is expected to have type
   forall {A : Type.{u1}} [_inst_1 : Add.{u1} A], OrderIso.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1))))))
 Case conversion may be inaccurate. Consider using '#align add_subsemigroup.to_subsemigroup AddSubsemigroup.toSubsemigroupₓ'. -/
@@ -174,7 +174,7 @@ def AddSubsemigroup.toSubsemigroup : AddSubsemigroup A ≃o Subsemigroup (Multip
 
 /- warning: subsemigroup.to_add_subsemigroup' -> Subsemigroup.toAddSubsemigroup' is a dubious translation:
 lean 3 declaration is
-  forall {A : Type.{u1}} [_inst_1 : Add.{u1} A], OrderIso.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1))))) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1))))
+  forall {A : Type.{u1}} [_inst_1 : Add.{u1} A], OrderIso.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1))))) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1))))
 but is expected to have type
   forall {A : Type.{u1}} [_inst_1 : Add.{u1} A], OrderIso.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1)))))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.to_add_subsemigroup' Subsemigroup.toAddSubsemigroup'ₓ'. -/
@@ -186,7 +186,7 @@ abbrev Subsemigroup.toAddSubsemigroup' : Subsemigroup (Multiplicative A) ≃o Ad
 
 /- warning: add_subsemigroup.to_subsemigroup_closure -> AddSubsemigroup.toSubsemigroup_closure is a dubious translation:
 lean 3 declaration is
-  forall {A : Type.{u1}} [_inst_1 : Add.{u1} A] (S : Set.{u1} A), Eq.{succ u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1)))) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)))))) (fun (_x : RelIso.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1))))) (LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1))))))) => (AddSubsemigroup.{u1} A _inst_1) -> (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1))) (RelIso.hasCoeToFun.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1))))) (LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1))))))) (AddSubsemigroup.toSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.closure.{u1} A _inst_1 S)) (Subsemigroup.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1) (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_1 : Add.{u1} A] (S : Set.{u1} A), Eq.{succ u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1)))) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)))))) (fun (_x : RelIso.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1))))) (LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1))))))) => (AddSubsemigroup.{u1} A _inst_1) -> (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1))) (RelIso.hasCoeToFun.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1))))) (LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1))))))) (AddSubsemigroup.toSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.closure.{u1} A _inst_1 S)) (Subsemigroup.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1) (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_1 : Add.{u1} A] (S : Set.{u1} A), Eq.{succ u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (AddSubsemigroup.{u1} A _inst_1) (fun (_x : AddSubsemigroup.{u1} A _inst_1) => Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.instRelHomClassRelIso.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298))) (AddSubsemigroup.toSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.closure.{u1} A _inst_1 S)) (Subsemigroup.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1) (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_subsemigroup.to_subsemigroup_closure AddSubsemigroup.toSubsemigroup_closureₓ'. -/
@@ -201,7 +201,7 @@ theorem AddSubsemigroup.toSubsemigroup_closure (S : Set A) :
 
 /- warning: subsemigroup.to_add_subsemigroup'_closure -> Subsemigroup.toAddSubsemigroup'_closure is a dubious translation:
 lean 3 declaration is
-  forall {A : Type.{u1}} [_inst_1 : Add.{u1} A] (S : Set.{u1} (Multiplicative.{u1} A)), Eq.{succ u1} (AddSubsemigroup.{u1} A _inst_1) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1))))) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1))))) (fun (_x : RelIso.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)))))) (LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1)))))) => (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) -> (AddSubsemigroup.{u1} A _inst_1)) (RelIso.hasCoeToFun.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)))))) (LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1)))))) (Subsemigroup.toAddSubsemigroup'.{u1} A _inst_1) (Subsemigroup.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1) S)) (AddSubsemigroup.closure.{u1} A _inst_1 (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_1 : Add.{u1} A] (S : Set.{u1} (Multiplicative.{u1} A)), Eq.{succ u1} (AddSubsemigroup.{u1} A _inst_1) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1))))) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1))))) (fun (_x : RelIso.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)))))) (LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1)))))) => (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) -> (AddSubsemigroup.{u1} A _inst_1)) (RelIso.hasCoeToFun.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)))))) (LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toHasLe.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1)))))) (Subsemigroup.toAddSubsemigroup'.{u1} A _inst_1) (Subsemigroup.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1) S)) (AddSubsemigroup.closure.{u1} A _inst_1 (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_1 : Add.{u1} A] (S : Set.{u1} (Multiplicative.{u1} A)), Eq.{succ u1} (AddSubsemigroup.{u1} A _inst_1) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (fun (_x : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => AddSubsemigroup.{u1} A _inst_1) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.instRelHomClassRelIso.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298))) (Subsemigroup.toAddSubsemigroup'.{u1} A _inst_1) (Subsemigroup.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1) S)) (AddSubsemigroup.closure.{u1} A _inst_1 (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 subsemigroup.to_add_subsemigroup'_closure Subsemigroup.toAddSubsemigroup'_closureₓ'. -/
@@ -360,7 +360,7 @@ theorem mem_map_iff_mem {f : M →ₙ* N} (hf : Function.Injective f) {S : Subse
 
 /- warning: subsemigroup.map_le_iff_le_comap -> Subsemigroup.map_le_iff_le_comap is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2} {S : Subsemigroup.{u1} M _inst_1} {T : Subsemigroup.{u2} N _inst_2}, Iff (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toLE.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S) T) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) S (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2} {S : Subsemigroup.{u1} M _inst_1} {T : Subsemigroup.{u2} N _inst_2}, Iff (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S) T) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) S (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))
 but is expected to have type
   forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2} {S : Subsemigroup.{u2} M _inst_1} {T : Subsemigroup.{u1} N _inst_2}, Iff (LE.le.{u1} (Subsemigroup.{u1} N _inst_2) (Preorder.toLE.{u1} (Subsemigroup.{u1} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2))))) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S) T) (LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1))))) S (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f T))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.map_le_iff_le_comap Subsemigroup.map_le_iff_le_comapₓ'. -/
@@ -385,7 +385,7 @@ theorem gc_map_comap (f : M →ₙ* N) : GaloisConnection (map f) (comap f) := f
 
 /- warning: subsemigroup.map_le_of_le_comap -> Subsemigroup.map_le_of_le_comap is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (S : Subsemigroup.{u1} M _inst_1) {T : Subsemigroup.{u2} N _inst_2} {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) S (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T)) -> (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toLE.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S) T)
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (S : Subsemigroup.{u1} M _inst_1) {T : Subsemigroup.{u2} N _inst_2} {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) S (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T)) -> (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S) T)
 but is expected to have type
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (S : Subsemigroup.{u1} M _inst_1) {T : Subsemigroup.{u2} N _inst_2} {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) S (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T)) -> (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toLE.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2))))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S) T)
 Case conversion may be inaccurate. Consider using '#align subsemigroup.map_le_of_le_comap Subsemigroup.map_le_of_le_comapₓ'. -/
@@ -397,7 +397,7 @@ theorem map_le_of_le_comap {T : Subsemigroup N} {f : M →ₙ* N} : S ≤ T.coma
 
 /- warning: subsemigroup.le_comap_of_map_le -> Subsemigroup.le_comap_of_map_le is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (S : Subsemigroup.{u1} M _inst_1) {T : Subsemigroup.{u2} N _inst_2} {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toLE.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S) T) -> (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) S (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (S : Subsemigroup.{u1} M _inst_1) {T : Subsemigroup.{u2} N _inst_2} {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S) T) -> (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) S (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))
 but is expected to have type
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (S : Subsemigroup.{u1} M _inst_1) {T : Subsemigroup.{u2} N _inst_2} {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toLE.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2))))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S) T) -> (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) S (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.le_comap_of_map_le Subsemigroup.le_comap_of_map_leₓ'. -/
@@ -409,7 +409,7 @@ theorem le_comap_of_map_le {T : Subsemigroup N} {f : M →ₙ* N} : S.map f ≤
 
 /- warning: subsemigroup.le_comap_map -> Subsemigroup.le_comap_map is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (S : Subsemigroup.{u1} M _inst_1) {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) S (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (S : Subsemigroup.{u1} M _inst_1) {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) S (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (Subsemigroup.map.{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 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (S : Subsemigroup.{u2} M _inst_1) {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1))))) S (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.le_comap_map Subsemigroup.le_comap_mapₓ'. -/
@@ -421,7 +421,7 @@ theorem le_comap_map {f : M →ₙ* N} : S ≤ (S.map f).comap f :=
 
 /- warning: subsemigroup.map_comap_le -> Subsemigroup.map_comap_le is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {S : Subsemigroup.{u2} N _inst_2} {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toLE.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S)) S
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {S : Subsemigroup.{u2} N _inst_2} {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S)) S
 but is expected to have type
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {S : Subsemigroup.{u2} N _inst_2} {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toLE.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2))))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S)) S
 Case conversion may be inaccurate. Consider using '#align subsemigroup.map_comap_le Subsemigroup.map_comap_leₓ'. -/
@@ -661,7 +661,7 @@ theorem comap_iSup_map_of_injective (S : ι → Subsemigroup M) :
 
 /- warning: subsemigroup.map_le_map_iff_of_injective -> Subsemigroup.map_le_map_iff_of_injective is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall {S : Subsemigroup.{u1} M _inst_1} {T : Subsemigroup.{u1} M _inst_1}, Iff (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toLE.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f T)) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) S T))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall {S : Subsemigroup.{u1} M _inst_1} {T : Subsemigroup.{u1} M _inst_1}, Iff (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f T)) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) S T))
 but is expected to have type
   forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall {S : Subsemigroup.{u2} M _inst_1} {T : Subsemigroup.{u2} M _inst_1}, Iff (LE.le.{u1} (Subsemigroup.{u1} N _inst_2) (Preorder.toLE.{u1} (Subsemigroup.{u1} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2))))) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f T)) (LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1))))) S T))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.map_le_map_iff_of_injective Subsemigroup.map_le_map_iff_of_injectiveₓ'. -/
@@ -788,7 +788,7 @@ theorem map_iSup_comap_of_surjective (S : ι → Subsemigroup N) :
 
 /- warning: subsemigroup.comap_le_comap_iff_of_surjective -> Subsemigroup.comap_le_comap_iff_of_surjective is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall {S : Subsemigroup.{u2} N _inst_2} {T : Subsemigroup.{u2} N _inst_2}, Iff (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T)) (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toLE.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) S T))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall {S : Subsemigroup.{u2} N _inst_2} {T : Subsemigroup.{u2} N _inst_2}, Iff (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T)) (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) S T))
 but is expected to have type
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (forall {S : Subsemigroup.{u2} N _inst_2} {T : Subsemigroup.{u2} N _inst_2}, Iff (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T)) (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toLE.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2))))) S T))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_le_comap_iff_of_surjective Subsemigroup.comap_le_comap_iff_of_surjectiveₓ'. -/
@@ -1028,7 +1028,7 @@ theorem mem_prod {s : Subsemigroup M} {t : Subsemigroup N} {p : M × N} :
 
 /- warning: subsemigroup.prod_mono -> Subsemigroup.prod_mono is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {s₁ : Subsemigroup.{u1} M _inst_1} {s₂ : Subsemigroup.{u1} M _inst_1} {t₁ : Subsemigroup.{u2} N _inst_2} {t₂ : Subsemigroup.{u2} N _inst_2}, (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) s₁ s₂) -> (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toLE.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) t₁ t₂) -> (LE.le.{max u1 u2} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)) (Preorder.toLE.{max u1 u2} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u1 u2} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)) (SetLike.partialOrder.{max u1 u2, max u1 u2} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)) (Prod.{u1, u2} M N) (Subsemigroup.setLike.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2))))) (Subsemigroup.prod.{u1, u2} M N _inst_1 _inst_2 s₁ t₁) (Subsemigroup.prod.{u1, u2} M N _inst_1 _inst_2 s₂ t₂))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {s₁ : Subsemigroup.{u1} M _inst_1} {s₂ : Subsemigroup.{u1} M _inst_1} {t₁ : Subsemigroup.{u2} N _inst_2} {t₂ : Subsemigroup.{u2} N _inst_2}, (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) s₁ s₂) -> (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) t₁ t₂) -> (LE.le.{max u1 u2} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)) (Preorder.toHasLe.{max u1 u2} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u1 u2} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)) (SetLike.partialOrder.{max u1 u2, max u1 u2} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)) (Prod.{u1, u2} M N) (Subsemigroup.setLike.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2))))) (Subsemigroup.prod.{u1, u2} M N _inst_1 _inst_2 s₁ t₁) (Subsemigroup.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 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {s₁ : Subsemigroup.{u2} M _inst_1} {s₂ : Subsemigroup.{u2} M _inst_1} {t₁ : Subsemigroup.{u1} N _inst_2} {t₂ : Subsemigroup.{u1} N _inst_2}, (LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1))))) s₁ s₂) -> (LE.le.{u1} (Subsemigroup.{u1} N _inst_2) (Preorder.toLE.{u1} (Subsemigroup.{u1} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2))))) t₁ t₂) -> (LE.le.{max u2 u1} (Subsemigroup.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)) (Preorder.toLE.{max u2 u1} (Subsemigroup.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u2 u1} (Subsemigroup.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)) (CompleteSemilatticeInf.toPartialOrder.{max u2 u1} (Subsemigroup.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)) (CompleteLattice.toCompleteSemilatticeInf.{max u2 u1} (Subsemigroup.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)) (Subsemigroup.instCompleteLatticeSubsemigroup.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)))))) (Subsemigroup.prod.{u2, u1} M N _inst_1 _inst_2 s₁ t₁) (Subsemigroup.prod.{u2, u1} M N _inst_1 _inst_2 s₂ t₂))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.prod_mono Subsemigroup.prod_monoₓ'. -/
@@ -1144,7 +1144,7 @@ theorem map_equiv_top (f : M ≃* N) : (⊤ : Subsemigroup M).map f.toMulHom = 
 
 /- warning: subsemigroup.le_prod_iff -> Subsemigroup.le_prod_iff is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {s : Subsemigroup.{u1} M _inst_1} {t : Subsemigroup.{u2} N _inst_2} {u : Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)}, Iff (LE.le.{max u1 u2} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)) (Preorder.toLE.{max u1 u2} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u1 u2} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)) (SetLike.partialOrder.{max u1 u2, max u1 u2} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)) (Prod.{u1, u2} M N) (Subsemigroup.setLike.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2))))) u (Subsemigroup.prod.{u1, u2} M N _inst_1 _inst_2 s t)) (And (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) (Subsemigroup.map.{max u1 u2, u1} (Prod.{u1, u2} M N) M (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2) _inst_1 (MulHom.fst.{u1, u2} M N _inst_1 _inst_2) u) s) (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toLE.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) (Subsemigroup.map.{max u1 u2, u2} (Prod.{u1, u2} M N) N (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2) _inst_2 (MulHom.snd.{u1, u2} M N _inst_1 _inst_2) u) t))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {s : Subsemigroup.{u1} M _inst_1} {t : Subsemigroup.{u2} N _inst_2} {u : Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)}, Iff (LE.le.{max u1 u2} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)) (Preorder.toHasLe.{max u1 u2} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u1 u2} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)) (SetLike.partialOrder.{max u1 u2, max u1 u2} (Subsemigroup.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2)) (Prod.{u1, u2} M N) (Subsemigroup.setLike.{max u1 u2} (Prod.{u1, u2} M N) (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2))))) u (Subsemigroup.prod.{u1, u2} M N _inst_1 _inst_2 s t)) (And (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) (Subsemigroup.map.{max u1 u2, u1} (Prod.{u1, u2} M N) M (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2) _inst_1 (MulHom.fst.{u1, u2} M N _inst_1 _inst_2) u) s) (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toHasLe.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) (Subsemigroup.map.{max u1 u2, u2} (Prod.{u1, u2} M N) N (Prod.hasMul.{u1, u2} M N _inst_1 _inst_2) _inst_2 (MulHom.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 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {s : Subsemigroup.{u2} M _inst_1} {t : Subsemigroup.{u1} N _inst_2} {u : Subsemigroup.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)}, Iff (LE.le.{max u2 u1} (Subsemigroup.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)) (Preorder.toLE.{max u2 u1} (Subsemigroup.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)) (PartialOrder.toPreorder.{max u2 u1} (Subsemigroup.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)) (CompleteSemilatticeInf.toPartialOrder.{max u2 u1} (Subsemigroup.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)) (CompleteLattice.toCompleteSemilatticeInf.{max u2 u1} (Subsemigroup.{max u1 u2} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)) (Subsemigroup.instCompleteLatticeSubsemigroup.{max u2 u1} (Prod.{u2, u1} M N) (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2)))))) u (Subsemigroup.prod.{u2, u1} M N _inst_1 _inst_2 s t)) (And (LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1))))) (Subsemigroup.map.{max u2 u1, u2} (Prod.{u2, u1} M N) M (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2) _inst_1 (MulHom.fst.{u2, u1} M N _inst_1 _inst_2) u) s) (LE.le.{u1} (Subsemigroup.{u1} N _inst_2) (Preorder.toLE.{u1} (Subsemigroup.{u1} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2))))) (Subsemigroup.map.{max u2 u1, u1} (Prod.{u2, u1} M N) N (Prod.instMulProd.{u2, u1} M N _inst_1 _inst_2) _inst_2 (MulHom.snd.{u2, u1} M N _inst_1 _inst_2) u) t))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.le_prod_iff Subsemigroup.le_prod_iffₓ'. -/
@@ -1250,7 +1250,7 @@ theorem srange_top_of_surjective {N} [Mul N] (f : M →ₙ* N) (hf : Function.Su
 
 /- warning: mul_hom.mclosure_preimage_le -> MulHom.mclosure_preimage_le is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (s : Set.{u2} N), LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) (Subsemigroup.closure.{u1} M _inst_1 (Set.preimage.{u1, u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) s)) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (Subsemigroup.closure.{u2} N _inst_2 s))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (s : Set.{u2} N), LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) (Subsemigroup.closure.{u1} M _inst_1 (Set.preimage.{u1, u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) s)) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (Subsemigroup.closure.{u2} N _inst_2 s))
 but is expected to have type
   forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (s : Set.{u1} N), LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1))))) (Subsemigroup.closure.{u2} M _inst_1 (Set.preimage.{u2, u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) s)) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Subsemigroup.closure.{u1} N _inst_2 s))
 Case conversion may be inaccurate. Consider using '#align mul_hom.mclosure_preimage_le MulHom.mclosure_preimage_leₓ'. -/
@@ -1435,7 +1435,7 @@ theorem prod_eq_top_iff [Nonempty M] [Nonempty N] {s : Subsemigroup M} {t : Subs
 
 /- warning: subsemigroup.inclusion -> Subsemigroup.inclusion is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Subsemigroup.{u1} M _inst_1} {T : Subsemigroup.{u1} M _inst_1}, (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) S T) -> (MulHom.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) T) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M _inst_1) _inst_1 (Subsemigroup.setLike.{u1} M _inst_1) (Subsemigroup.mulMemClass.{u1} M _inst_1) S) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M _inst_1) _inst_1 (Subsemigroup.setLike.{u1} M _inst_1) (Subsemigroup.mulMemClass.{u1} M _inst_1) T))
+  forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Subsemigroup.{u1} M _inst_1} {T : Subsemigroup.{u1} M _inst_1}, (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toHasLe.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) S T) -> (MulHom.{u1, u1} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) T) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M _inst_1) _inst_1 (Subsemigroup.setLike.{u1} M _inst_1) (Subsemigroup.mulMemClass.{u1} M _inst_1) S) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M _inst_1) _inst_1 (Subsemigroup.setLike.{u1} M _inst_1) (Subsemigroup.mulMemClass.{u1} M _inst_1) T))
 but is expected to have type
   forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] {S : Subsemigroup.{u1} M _inst_1} {T : Subsemigroup.{u1} M _inst_1}, (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) S T) -> (MulHom.{u1, u1} (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) x S)) (Subtype.{succ u1} M (fun (x : M) => Membership.mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1)) x T)) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} M _inst_1) S) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u1} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} M _inst_1) T))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.inclusion Subsemigroup.inclusionₓ'. -/
Diff
@@ -1099,7 +1099,7 @@ open MulHom
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulEquiv.{u1, u2} M N _inst_1 _inst_2} {K : Subsemigroup.{u1} M _inst_1} {x : N}, Iff (Membership.Mem.{u2, u2} N (Subsemigroup.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) x (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 (MulEquiv.toMulHom.{u1, u2} M N _inst_1 _inst_2 f) K)) (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u2, u1} N M _inst_2 _inst_1) (fun (_x : MulEquiv.{u2, u1} N M _inst_2 _inst_1) => N -> M) (MulEquiv.hasCoeToFun.{u2, u1} N M _inst_2 _inst_1) (MulEquiv.symm.{u1, u2} M N _inst_1 _inst_2 f) x) K)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulEquiv.{u2, u1} M N _inst_1 _inst_2} {K : Subsemigroup.{u2} M _inst_1} {x : N}, Iff (Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 (MulEquiv.toMulHom.{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) (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) (FunLike.coe.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} N M _inst_2 _inst_1) N (fun (_x : N) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : N) => M) _x) (EmbeddingLike.toFunLike.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} N M _inst_2 _inst_1) N M (EquivLike.toEmbeddingLike.{max (succ u2) (succ u1), succ u1, succ u2} (MulEquiv.{u1, u2} N M _inst_2 _inst_1) N M (MulEquivClass.toEquivLike.{max u2 u1, u1, u2} (MulEquiv.{u1, u2} N M _inst_2 _inst_1) N M _inst_2 _inst_1 (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M _inst_2 _inst_1)))) (MulEquiv.symm.{u2, u1} M N _inst_1 _inst_2 f) x) K)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulEquiv.{u2, u1} M N _inst_1 _inst_2} {K : Subsemigroup.{u2} M _inst_1} {x : N}, Iff (Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 (MulEquiv.toMulHom.{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) (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M _inst_2 _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 _inst_2 _inst_1) N M (EquivLike.toEmbeddingLike.{max (succ u1) (succ u2), succ u1, succ u2} (MulEquiv.{u1, u2} N M _inst_2 _inst_1) N M (MulEquivClass.toEquivLike.{max u1 u2, u1, u2} (MulEquiv.{u1, u2} N M _inst_2 _inst_1) N M _inst_2 _inst_1 (MulEquiv.instMulEquivClassMulEquiv.{u1, u2} N M _inst_2 _inst_1)))) (MulEquiv.symm.{u2, u1} M N _inst_1 _inst_2 f) x) K)
 Case conversion may be inaccurate. Consider using '#align subsemigroup.mem_map_equiv Subsemigroup.mem_map_equivₓ'. -/
 @[to_additive]
 theorem mem_map_equiv {f : M ≃* N} {K : Subsemigroup M} {x : N} :
Diff
@@ -488,18 +488,18 @@ theorem map_sup (S T : Subsemigroup M) (f : M →ₙ* N) : (S ⊔ T).map f = S.m
 #align subsemigroup.map_sup Subsemigroup.map_sup
 #align add_subsemigroup.map_sup AddSubsemigroup.map_sup
 
-/- warning: subsemigroup.map_supr -> Subsemigroup.map_supᵢ is a dubious translation:
+/- warning: subsemigroup.map_supr -> Subsemigroup.map_iSup is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {ι : Sort.{u3}} (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (s : ι -> (Subsemigroup.{u1} M _inst_1)), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (supᵢ.{u1, u3} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1))) ι s)) (supᵢ.{u2, u3} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.completeLattice.{u2} N _inst_2))) ι (fun (i : ι) => Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (s i)))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {ι : Sort.{u3}} (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (s : ι -> (Subsemigroup.{u1} M _inst_1)), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (iSup.{u1, u3} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1))) ι s)) (iSup.{u2, u3} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.completeLattice.{u2} N _inst_2))) ι (fun (i : ι) => Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (s i)))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {ι : Sort.{u3}} (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (s : ι -> (Subsemigroup.{u2} M _inst_1)), Eq.{succ u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f (supᵢ.{u2, u3} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι s)) (supᵢ.{u1, u3} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toSupSet.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2)) ι (fun (i : ι) => Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f (s i)))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.map_supr Subsemigroup.map_supᵢₓ'. -/
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {ι : Sort.{u3}} (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (s : ι -> (Subsemigroup.{u2} M _inst_1)), Eq.{succ u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f (iSup.{u2, u3} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι s)) (iSup.{u1, u3} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toSupSet.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2)) ι (fun (i : ι) => Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f (s i)))
+Case conversion may be inaccurate. Consider using '#align subsemigroup.map_supr Subsemigroup.map_iSupₓ'. -/
 @[to_additive]
-theorem map_supᵢ {ι : Sort _} (f : M →ₙ* N) (s : ι → Subsemigroup M) :
-    (supᵢ s).map f = ⨆ i, (s i).map f :=
-  (gc_map_comap f).l_supᵢ
-#align subsemigroup.map_supr Subsemigroup.map_supᵢ
-#align add_subsemigroup.map_supr AddSubsemigroup.map_supᵢ
+theorem map_iSup {ι : Sort _} (f : M →ₙ* N) (s : ι → Subsemigroup M) :
+    (iSup s).map f = ⨆ i, (s i).map f :=
+  (gc_map_comap f).l_iSup
+#align subsemigroup.map_supr Subsemigroup.map_iSup
+#align add_subsemigroup.map_supr AddSubsemigroup.map_iSup
 
 /- warning: subsemigroup.comap_inf -> Subsemigroup.comap_inf is a dubious translation:
 lean 3 declaration is
@@ -513,18 +513,18 @@ theorem comap_inf (S T : Subsemigroup N) (f : M →ₙ* N) : (S ⊓ T).comap f =
 #align subsemigroup.comap_inf Subsemigroup.comap_inf
 #align add_subsemigroup.comap_inf AddSubsemigroup.comap_inf
 
-/- warning: subsemigroup.comap_infi -> Subsemigroup.comap_infᵢ is a dubious translation:
+/- warning: subsemigroup.comap_infi -> Subsemigroup.comap_iInf is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {ι : Sort.{u3}} (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (s : ι -> (Subsemigroup.{u2} N _inst_2)), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (infᵢ.{u2, u3} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasInf.{u2} N _inst_2) ι s)) (infᵢ.{u1, u3} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasInf.{u1} M _inst_1) ι (fun (i : ι) => Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (s i)))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {ι : Sort.{u3}} (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (s : ι -> (Subsemigroup.{u2} N _inst_2)), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (iInf.{u2, u3} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasInf.{u2} N _inst_2) ι s)) (iInf.{u1, u3} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasInf.{u1} M _inst_1) ι (fun (i : ι) => Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (s i)))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {ι : Sort.{u3}} (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (s : ι -> (Subsemigroup.{u1} N _inst_2)), Eq.{succ u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (infᵢ.{u1, u3} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instInfSetSubsemigroup.{u1} N _inst_2) ι s)) (infᵢ.{u2, u3} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instInfSetSubsemigroup.{u2} M _inst_1) ι (fun (i : ι) => Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (s i)))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_infi Subsemigroup.comap_infᵢₓ'. -/
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {ι : Sort.{u3}} (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (s : ι -> (Subsemigroup.{u1} N _inst_2)), Eq.{succ u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (iInf.{u1, u3} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instInfSetSubsemigroup.{u1} N _inst_2) ι s)) (iInf.{u2, u3} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instInfSetSubsemigroup.{u2} M _inst_1) ι (fun (i : ι) => Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (s i)))
+Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_infi Subsemigroup.comap_iInfₓ'. -/
 @[to_additive]
-theorem comap_infᵢ {ι : Sort _} (f : M →ₙ* N) (s : ι → Subsemigroup N) :
-    (infᵢ s).comap f = ⨅ i, (s i).comap f :=
-  (gc_map_comap f).u_infᵢ
-#align subsemigroup.comap_infi Subsemigroup.comap_infᵢ
-#align add_subsemigroup.comap_infi AddSubsemigroup.comap_infᵢ
+theorem comap_iInf {ι : Sort _} (f : M →ₙ* N) (s : ι → Subsemigroup N) :
+    (iInf s).comap f = ⨅ i, (s i).comap f :=
+  (gc_map_comap f).u_iInf
+#align subsemigroup.comap_infi Subsemigroup.comap_iInf
+#align add_subsemigroup.comap_infi AddSubsemigroup.comap_iInf
 
 /- warning: subsemigroup.map_bot -> Subsemigroup.map_bot is a dubious translation:
 lean 3 declaration is
@@ -621,18 +621,18 @@ theorem comap_inf_map_of_injective (S T : Subsemigroup M) : (S.map f ⊓ T.map f
 #align subsemigroup.comap_inf_map_of_injective Subsemigroup.comap_inf_map_of_injective
 #align add_subsemigroup.comap_inf_map_of_injective AddSubsemigroup.comap_inf_map_of_injective
 
-/- warning: subsemigroup.comap_infi_map_of_injective -> Subsemigroup.comap_infᵢ_map_of_injective is a dubious translation:
+/- warning: subsemigroup.comap_infi_map_of_injective -> Subsemigroup.comap_iInf_map_of_injective is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u3}} {f : MulHom.{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)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : ι -> (Subsemigroup.{u1} M _inst_1)), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (infᵢ.{u2, succ u3} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasInf.{u2} N _inst_2) ι (fun (i : ι) => Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (S i)))) (infᵢ.{u1, succ u3} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasInf.{u1} M _inst_1) ι S))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u3}} {f : MulHom.{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)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : ι -> (Subsemigroup.{u1} M _inst_1)), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (iInf.{u2, succ u3} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasInf.{u2} N _inst_2) ι (fun (i : ι) => Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (S i)))) (iInf.{u1, succ u3} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasInf.{u1} M _inst_1) ι S))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u1}} {f : MulHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} M _inst_1)), Eq.{succ u3} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.comap.{u3, u2} M N _inst_1 _inst_2 f (infᵢ.{u2, succ u1} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instInfSetSubsemigroup.{u2} N _inst_2) ι (fun (i : ι) => Subsemigroup.map.{u3, u2} M N _inst_1 _inst_2 f (S i)))) (infᵢ.{u3, succ u1} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.instInfSetSubsemigroup.{u3} M _inst_1) ι S))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_infi_map_of_injective Subsemigroup.comap_infᵢ_map_of_injectiveₓ'. -/
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u1}} {f : MulHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} M _inst_1)), Eq.{succ u3} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.comap.{u3, u2} M N _inst_1 _inst_2 f (iInf.{u2, succ u1} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instInfSetSubsemigroup.{u2} N _inst_2) ι (fun (i : ι) => Subsemigroup.map.{u3, u2} M N _inst_1 _inst_2 f (S i)))) (iInf.{u3, succ u1} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.instInfSetSubsemigroup.{u3} M _inst_1) ι S))
+Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_infi_map_of_injective Subsemigroup.comap_iInf_map_of_injectiveₓ'. -/
 @[to_additive]
-theorem comap_infᵢ_map_of_injective (S : ι → Subsemigroup M) :
-    (⨅ i, (S i).map f).comap f = infᵢ S :=
-  (gciMapComap hf).u_infᵢ_l _
-#align subsemigroup.comap_infi_map_of_injective Subsemigroup.comap_infᵢ_map_of_injective
-#align add_subsemigroup.comap_infi_map_of_injective AddSubsemigroup.comap_infᵢ_map_of_injective
+theorem comap_iInf_map_of_injective (S : ι → Subsemigroup M) :
+    (⨅ i, (S i).map f).comap f = iInf S :=
+  (gciMapComap hf).u_iInf_l _
+#align subsemigroup.comap_infi_map_of_injective Subsemigroup.comap_iInf_map_of_injective
+#align add_subsemigroup.comap_infi_map_of_injective AddSubsemigroup.comap_iInf_map_of_injective
 
 /- warning: subsemigroup.comap_sup_map_of_injective -> Subsemigroup.comap_sup_map_of_injective is a dubious translation:
 lean 3 declaration is
@@ -646,18 +646,18 @@ theorem comap_sup_map_of_injective (S T : Subsemigroup M) : (S.map f ⊔ T.map f
 #align subsemigroup.comap_sup_map_of_injective Subsemigroup.comap_sup_map_of_injective
 #align add_subsemigroup.comap_sup_map_of_injective AddSubsemigroup.comap_sup_map_of_injective
 
-/- warning: subsemigroup.comap_supr_map_of_injective -> Subsemigroup.comap_supᵢ_map_of_injective is a dubious translation:
+/- warning: subsemigroup.comap_supr_map_of_injective -> Subsemigroup.comap_iSup_map_of_injective is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u3}} {f : MulHom.{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)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : ι -> (Subsemigroup.{u1} M _inst_1)), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (supᵢ.{u2, succ u3} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.completeLattice.{u2} N _inst_2))) ι (fun (i : ι) => Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (S i)))) (supᵢ.{u1, succ u3} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1))) ι S))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u3}} {f : MulHom.{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)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : ι -> (Subsemigroup.{u1} M _inst_1)), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (iSup.{u2, succ u3} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.completeLattice.{u2} N _inst_2))) ι (fun (i : ι) => Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (S i)))) (iSup.{u1, succ u3} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1))) ι S))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u1}} {f : MulHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} M _inst_1)), Eq.{succ u3} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.comap.{u3, u2} M N _inst_1 _inst_2 f (supᵢ.{u2, succ u1} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)) ι (fun (i : ι) => Subsemigroup.map.{u3, u2} M N _inst_1 _inst_2 f (S i)))) (supᵢ.{u3, succ u1} (Subsemigroup.{u3} M _inst_1) (CompleteLattice.toSupSet.{u3} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u3} M _inst_1)) ι S))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_supr_map_of_injective Subsemigroup.comap_supᵢ_map_of_injectiveₓ'. -/
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u1}} {f : MulHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} M _inst_1)), Eq.{succ u3} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.comap.{u3, u2} M N _inst_1 _inst_2 f (iSup.{u2, succ u1} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)) ι (fun (i : ι) => Subsemigroup.map.{u3, u2} M N _inst_1 _inst_2 f (S i)))) (iSup.{u3, succ u1} (Subsemigroup.{u3} M _inst_1) (CompleteLattice.toSupSet.{u3} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u3} M _inst_1)) ι S))
+Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_supr_map_of_injective Subsemigroup.comap_iSup_map_of_injectiveₓ'. -/
 @[to_additive]
-theorem comap_supᵢ_map_of_injective (S : ι → Subsemigroup M) :
-    (⨆ i, (S i).map f).comap f = supᵢ S :=
-  (gciMapComap hf).u_supᵢ_l _
-#align subsemigroup.comap_supr_map_of_injective Subsemigroup.comap_supᵢ_map_of_injective
-#align add_subsemigroup.comap_supr_map_of_injective AddSubsemigroup.comap_supᵢ_map_of_injective
+theorem comap_iSup_map_of_injective (S : ι → Subsemigroup M) :
+    (⨆ i, (S i).map f).comap f = iSup S :=
+  (gciMapComap hf).u_iSup_l _
+#align subsemigroup.comap_supr_map_of_injective Subsemigroup.comap_iSup_map_of_injective
+#align add_subsemigroup.comap_supr_map_of_injective AddSubsemigroup.comap_iSup_map_of_injective
 
 /- warning: subsemigroup.map_le_map_iff_of_injective -> Subsemigroup.map_le_map_iff_of_injective is a dubious translation:
 lean 3 declaration is
@@ -747,18 +747,18 @@ theorem map_inf_comap_of_surjective (S T : Subsemigroup N) :
 #align subsemigroup.map_inf_comap_of_surjective Subsemigroup.map_inf_comap_of_surjective
 #align add_subsemigroup.map_inf_comap_of_surjective AddSubsemigroup.map_inf_comap_of_surjective
 
-/- warning: subsemigroup.map_infi_comap_of_surjective -> Subsemigroup.map_infᵢ_comap_of_surjective is a dubious translation:
+/- warning: subsemigroup.map_infi_comap_of_surjective -> Subsemigroup.map_iInf_comap_of_surjective is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u3}} {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : ι -> (Subsemigroup.{u2} N _inst_2)), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (infᵢ.{u1, succ u3} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasInf.{u1} M _inst_1) ι (fun (i : ι) => Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (S i)))) (infᵢ.{u2, succ u3} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasInf.{u2} N _inst_2) ι S))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u3}} {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : ι -> (Subsemigroup.{u2} N _inst_2)), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (iInf.{u1, succ u3} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasInf.{u1} M _inst_1) ι (fun (i : ι) => Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (S i)))) (iInf.{u2, succ u3} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasInf.{u2} N _inst_2) ι S))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u3} N] {ι : Type.{u1}} {f : MulHom.{u2, u3} M N _inst_1 _inst_2}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MulHom.{u2, u3} 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 u3, u2, u3} (MulHom.{u2, u3} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u3} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} N _inst_2)), Eq.{succ u3} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.map.{u2, u3} M N _inst_1 _inst_2 f (infᵢ.{u2, succ u1} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instInfSetSubsemigroup.{u2} M _inst_1) ι (fun (i : ι) => Subsemigroup.comap.{u2, u3} M N _inst_1 _inst_2 f (S i)))) (infᵢ.{u3, succ u1} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.instInfSetSubsemigroup.{u3} N _inst_2) ι S))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.map_infi_comap_of_surjective Subsemigroup.map_infᵢ_comap_of_surjectiveₓ'. -/
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u3} N] {ι : Type.{u1}} {f : MulHom.{u2, u3} M N _inst_1 _inst_2}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MulHom.{u2, u3} 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 u3, u2, u3} (MulHom.{u2, u3} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u3} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} N _inst_2)), Eq.{succ u3} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.map.{u2, u3} M N _inst_1 _inst_2 f (iInf.{u2, succ u1} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instInfSetSubsemigroup.{u2} M _inst_1) ι (fun (i : ι) => Subsemigroup.comap.{u2, u3} M N _inst_1 _inst_2 f (S i)))) (iInf.{u3, succ u1} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.instInfSetSubsemigroup.{u3} N _inst_2) ι S))
+Case conversion may be inaccurate. Consider using '#align subsemigroup.map_infi_comap_of_surjective Subsemigroup.map_iInf_comap_of_surjectiveₓ'. -/
 @[to_additive]
-theorem map_infᵢ_comap_of_surjective (S : ι → Subsemigroup N) :
-    (⨅ i, (S i).comap f).map f = infᵢ S :=
-  (giMapComap hf).l_infᵢ_u _
-#align subsemigroup.map_infi_comap_of_surjective Subsemigroup.map_infᵢ_comap_of_surjective
-#align add_subsemigroup.map_infi_comap_of_surjective AddSubsemigroup.map_infᵢ_comap_of_surjective
+theorem map_iInf_comap_of_surjective (S : ι → Subsemigroup N) :
+    (⨅ i, (S i).comap f).map f = iInf S :=
+  (giMapComap hf).l_iInf_u _
+#align subsemigroup.map_infi_comap_of_surjective Subsemigroup.map_iInf_comap_of_surjective
+#align add_subsemigroup.map_infi_comap_of_surjective AddSubsemigroup.map_iInf_comap_of_surjective
 
 /- warning: subsemigroup.map_sup_comap_of_surjective -> Subsemigroup.map_sup_comap_of_surjective is a dubious translation:
 lean 3 declaration is
@@ -773,18 +773,18 @@ theorem map_sup_comap_of_surjective (S T : Subsemigroup N) :
 #align subsemigroup.map_sup_comap_of_surjective Subsemigroup.map_sup_comap_of_surjective
 #align add_subsemigroup.map_sup_comap_of_surjective AddSubsemigroup.map_sup_comap_of_surjective
 
-/- warning: subsemigroup.map_supr_comap_of_surjective -> Subsemigroup.map_supᵢ_comap_of_surjective is a dubious translation:
+/- warning: subsemigroup.map_supr_comap_of_surjective -> Subsemigroup.map_iSup_comap_of_surjective is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u3}} {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : ι -> (Subsemigroup.{u2} N _inst_2)), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (supᵢ.{u1, succ u3} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1))) ι (fun (i : ι) => Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (S i)))) (supᵢ.{u2, succ u3} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.completeLattice.{u2} N _inst_2))) ι S))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u3}} {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : ι -> (Subsemigroup.{u2} N _inst_2)), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (iSup.{u1, succ u3} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1))) ι (fun (i : ι) => Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (S i)))) (iSup.{u2, succ u3} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.completeLattice.{u2} N _inst_2))) ι S))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u3} N] {ι : Type.{u1}} {f : MulHom.{u2, u3} M N _inst_1 _inst_2}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MulHom.{u2, u3} 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 u3, u2, u3} (MulHom.{u2, u3} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u3} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} N _inst_2)), Eq.{succ u3} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.map.{u2, u3} M N _inst_1 _inst_2 f (supᵢ.{u2, succ u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => Subsemigroup.comap.{u2, u3} M N _inst_1 _inst_2 f (S i)))) (supᵢ.{u3, succ u1} (Subsemigroup.{u3} N _inst_2) (CompleteLattice.toSupSet.{u3} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u3} N _inst_2)) ι S))
-Case conversion may be inaccurate. Consider using '#align subsemigroup.map_supr_comap_of_surjective Subsemigroup.map_supᵢ_comap_of_surjectiveₓ'. -/
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u3} N] {ι : Type.{u1}} {f : MulHom.{u2, u3} M N _inst_1 _inst_2}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MulHom.{u2, u3} 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 u3, u2, u3} (MulHom.{u2, u3} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u3} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} N _inst_2)), Eq.{succ u3} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.map.{u2, u3} M N _inst_1 _inst_2 f (iSup.{u2, succ u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => Subsemigroup.comap.{u2, u3} M N _inst_1 _inst_2 f (S i)))) (iSup.{u3, succ u1} (Subsemigroup.{u3} N _inst_2) (CompleteLattice.toSupSet.{u3} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u3} N _inst_2)) ι S))
+Case conversion may be inaccurate. Consider using '#align subsemigroup.map_supr_comap_of_surjective Subsemigroup.map_iSup_comap_of_surjectiveₓ'. -/
 @[to_additive]
-theorem map_supᵢ_comap_of_surjective (S : ι → Subsemigroup N) :
-    (⨆ i, (S i).comap f).map f = supᵢ S :=
-  (giMapComap hf).l_supᵢ_u _
-#align subsemigroup.map_supr_comap_of_surjective Subsemigroup.map_supᵢ_comap_of_surjective
-#align add_subsemigroup.map_supr_comap_of_surjective AddSubsemigroup.map_supᵢ_comap_of_surjective
+theorem map_iSup_comap_of_surjective (S : ι → Subsemigroup N) :
+    (⨆ i, (S i).comap f).map f = iSup S :=
+  (giMapComap hf).l_iSup_u _
+#align subsemigroup.map_supr_comap_of_surjective Subsemigroup.map_iSup_comap_of_surjective
+#align add_subsemigroup.map_supr_comap_of_surjective AddSubsemigroup.map_iSup_comap_of_surjective
 
 /- warning: subsemigroup.comap_le_comap_iff_of_surjective -> Subsemigroup.comap_le_comap_iff_of_surjective is a dubious translation:
 lean 3 declaration is
Diff
@@ -119,7 +119,7 @@ abbrev AddSubsemigroup.toSubsemigroup' : AddSubsemigroup (Additive M) ≃o Subse
 lean 3 declaration is
   forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] (S : Set.{u1} M), Eq.{succ u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)))))) (fun (_x : RelIso.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))))) (LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1))))))) => (Subsemigroup.{u1} M _inst_1) -> (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1))) (RelIso.hasCoeToFun.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))))) (LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1))))))) (Subsemigroup.toAddSubsemigroup.{u1} M _inst_1) (Subsemigroup.closure.{u1} M _inst_1 S)) (AddSubsemigroup.closure.{u1} (Additive.{u1} M) (Additive.hasAdd.{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 : Mul.{u1} M] (S : Set.{u1} M), Eq.{succ u1} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Subsemigroup.{u1} M _inst_1) => AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.closure.{u1} M _inst_1 S)) (FunLike.coe.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1))) (Subsemigroup.{u1} M _inst_1) (fun (_x : Subsemigroup.{u1} M _inst_1) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Subsemigroup.{u1} M _inst_1) => AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) _x) (EmbeddingLike.toFunLike.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1))) (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Function.instEmbeddingLikeEmbedding.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)))) (RelEmbedding.toEmbedding.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{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 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.toRelEmbedding.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{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 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (Subsemigroup.toAddSubsemigroup.{u1} M _inst_1))) (Subsemigroup.closure.{u1} M _inst_1 S)) (AddSubsemigroup.closure.{u1} (Additive.{u1} M) (Additive.add.{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 : Mul.{u1} M] (S : Set.{u1} M), Eq.{succ u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{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 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (Subsemigroup.{u1} M _inst_1) (fun (_x : Subsemigroup.{u1} M _inst_1) => AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{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 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{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 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.instRelHomClassRelIso.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{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 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298))) (Subsemigroup.toAddSubsemigroup.{u1} M _inst_1) (Subsemigroup.closure.{u1} M _inst_1 S)) (AddSubsemigroup.closure.{u1} (Additive.{u1} M) (Additive.add.{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 subsemigroup.to_add_subsemigroup_closure Subsemigroup.toAddSubsemigroup_closureₓ'. -/
 theorem Subsemigroup.toAddSubsemigroup_closure (S : Set M) :
     (Subsemigroup.closure S).toAddSubsemigroup = AddSubsemigroup.closure (Additive.toMul ⁻¹' S) :=
@@ -133,7 +133,7 @@ theorem Subsemigroup.toAddSubsemigroup_closure (S : Set M) :
 lean 3 declaration is
   forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] (S : Set.{u1} (Additive.{u1} M)), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1))))) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))))) (fun (_x : RelIso.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)))))) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))))) => (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) -> (Subsemigroup.{u1} M _inst_1)) (RelIso.hasCoeToFun.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)))))) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))))) (AddSubsemigroup.toSubsemigroup'.{u1} M _inst_1) (AddSubsemigroup.closure.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1) S)) (Subsemigroup.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 : Mul.{u1} M] (S : Set.{u1} (Additive.{u1} M)), Eq.{succ u1} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.closure.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1) S)) (FunLike.coe.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1)) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (fun (_x : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => Subsemigroup.{u1} M _inst_1) _x) (EmbeddingLike.toFunLike.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1)) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (Function.instEmbeddingLikeEmbedding.{succ u1, succ u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1))) (RelEmbedding.toEmbedding.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{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 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.toRelEmbedding.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{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 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (AddSubsemigroup.toSubsemigroup'.{u1} M _inst_1))) (AddSubsemigroup.closure.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1) S)) (Subsemigroup.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 : Mul.{u1} M] (S : Set.{u1} (Additive.{u1} M)), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{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 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (fun (_x : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => Subsemigroup.{u1} M _inst_1) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{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 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{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 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.instRelHomClassRelIso.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{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 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298))) (AddSubsemigroup.toSubsemigroup'.{u1} M _inst_1) (AddSubsemigroup.closure.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1) S)) (Subsemigroup.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_subsemigroup.to_subsemigroup'_closure AddSubsemigroup.toSubsemigroup'_closureₓ'. -/
 theorem AddSubsemigroup.toSubsemigroup'_closure (S : Set (Additive M)) :
     (AddSubsemigroup.closure S).toSubsemigroup' =
@@ -188,7 +188,7 @@ abbrev Subsemigroup.toAddSubsemigroup' : Subsemigroup (Multiplicative A) ≃o Ad
 lean 3 declaration is
   forall {A : Type.{u1}} [_inst_1 : Add.{u1} A] (S : Set.{u1} A), Eq.{succ u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1)))) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)))))) (fun (_x : RelIso.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1))))) (LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1))))))) => (AddSubsemigroup.{u1} A _inst_1) -> (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1))) (RelIso.hasCoeToFun.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1))))) (LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1))))))) (AddSubsemigroup.toSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.closure.{u1} A _inst_1 S)) (Subsemigroup.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1) (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_1 : Add.{u1} A] (S : Set.{u1} A), Eq.{succ u1} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : AddSubsemigroup.{u1} A _inst_1) => Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.closure.{u1} A _inst_1 S)) (FunLike.coe.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1))) (AddSubsemigroup.{u1} A _inst_1) (fun (_x : AddSubsemigroup.{u1} A _inst_1) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : AddSubsemigroup.{u1} A _inst_1) => Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) _x) (EmbeddingLike.toFunLike.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1))) (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Function.instEmbeddingLikeEmbedding.{succ u1, succ u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))) (RelEmbedding.toEmbedding.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.toRelEmbedding.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (AddSubsemigroup.toSubsemigroup.{u1} A _inst_1))) (AddSubsemigroup.closure.{u1} A _inst_1 S)) (Subsemigroup.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1) (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_1 : Add.{u1} A] (S : Set.{u1} A), Eq.{succ u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (AddSubsemigroup.{u1} A _inst_1) (fun (_x : AddSubsemigroup.{u1} A _inst_1) => Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.instRelHomClassRelIso.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298))) (AddSubsemigroup.toSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.closure.{u1} A _inst_1 S)) (Subsemigroup.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1) (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_subsemigroup.to_subsemigroup_closure AddSubsemigroup.toSubsemigroup_closureₓ'. -/
 theorem AddSubsemigroup.toSubsemigroup_closure (S : Set A) :
     (AddSubsemigroup.closure S).toSubsemigroup =
@@ -203,7 +203,7 @@ theorem AddSubsemigroup.toSubsemigroup_closure (S : Set A) :
 lean 3 declaration is
   forall {A : Type.{u1}} [_inst_1 : Add.{u1} A] (S : Set.{u1} (Multiplicative.{u1} A)), Eq.{succ u1} (AddSubsemigroup.{u1} A _inst_1) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1))))) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1))))) (fun (_x : RelIso.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)))))) (LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1)))))) => (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) -> (AddSubsemigroup.{u1} A _inst_1)) (RelIso.hasCoeToFun.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)))))) (LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1)))))) (Subsemigroup.toAddSubsemigroup'.{u1} A _inst_1) (Subsemigroup.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1) S)) (AddSubsemigroup.closure.{u1} A _inst_1 (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_1 : Add.{u1} A] (S : Set.{u1} (Multiplicative.{u1} A)), Eq.{succ u1} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1) S)) (FunLike.coe.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1)) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (fun (_x : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => AddSubsemigroup.{u1} A _inst_1) _x) (EmbeddingLike.toFunLike.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1)) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (Function.instEmbeddingLikeEmbedding.{succ u1, succ u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1))) (RelEmbedding.toEmbedding.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.toRelEmbedding.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (Subsemigroup.toAddSubsemigroup'.{u1} A _inst_1))) (Subsemigroup.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1) S)) (AddSubsemigroup.closure.{u1} A _inst_1 (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_1 : Add.{u1} A] (S : Set.{u1} (Multiplicative.{u1} A)), Eq.{succ u1} (AddSubsemigroup.{u1} A _inst_1) (FunLike.coe.{succ u1, succ u1, succ u1} (RelIso.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (fun (_x : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => AddSubsemigroup.{u1} A _inst_1) (RelHomClass.toFunLike.{u1, u1, u1} (RelIso.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298)) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.instRelHomClassRelIso.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298))) (Subsemigroup.toAddSubsemigroup'.{u1} A _inst_1) (Subsemigroup.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1) S)) (AddSubsemigroup.closure.{u1} A _inst_1 (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 subsemigroup.to_add_subsemigroup'_closure Subsemigroup.toAddSubsemigroup'_closureₓ'. -/
 theorem Subsemigroup.toAddSubsemigroup'_closure (S : Set (Multiplicative A)) :
     (Subsemigroup.closure S).toAddSubsemigroup' = AddSubsemigroup.closure (Additive.ofMul ⁻¹' S) :=
Diff
@@ -119,7 +119,7 @@ abbrev AddSubsemigroup.toSubsemigroup' : AddSubsemigroup (Additive M) ≃o Subse
 lean 3 declaration is
   forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] (S : Set.{u1} M), Eq.{succ u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)))))) (fun (_x : RelIso.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))))) (LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1))))))) => (Subsemigroup.{u1} M _inst_1) -> (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1))) (RelIso.hasCoeToFun.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))))) (LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1))))))) (Subsemigroup.toAddSubsemigroup.{u1} M _inst_1) (Subsemigroup.closure.{u1} M _inst_1 S)) (AddSubsemigroup.closure.{u1} (Additive.{u1} M) (Additive.hasAdd.{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 : Mul.{u1} M] (S : Set.{u1} M), Eq.{succ u1} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Subsemigroup.{u1} M _inst_1) => AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.closure.{u1} M _inst_1 S)) (FunLike.coe.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1))) (Subsemigroup.{u1} M _inst_1) (fun (_x : Subsemigroup.{u1} M _inst_1) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Subsemigroup.{u1} M _inst_1) => AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) _x) (EmbeddingLike.toFunLike.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1))) (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Function.instEmbeddingLikeEmbedding.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)))) (RelEmbedding.toEmbedding.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{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 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.toRelEmbedding.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{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 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (Subsemigroup.toAddSubsemigroup.{u1} M _inst_1))) (Subsemigroup.closure.{u1} M _inst_1 S)) (AddSubsemigroup.closure.{u1} (Additive.{u1} M) (Additive.add.{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 : Mul.{u1} M] (S : Set.{u1} M), Eq.{succ u1} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Subsemigroup.{u1} M _inst_1) => AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.closure.{u1} M _inst_1 S)) (FunLike.coe.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1))) (Subsemigroup.{u1} M _inst_1) (fun (_x : Subsemigroup.{u1} M _inst_1) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Subsemigroup.{u1} M _inst_1) => AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) _x) (EmbeddingLike.toFunLike.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1))) (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Function.instEmbeddingLikeEmbedding.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)))) (RelEmbedding.toEmbedding.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{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 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.toRelEmbedding.{u1, u1} (Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{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 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (Subsemigroup.toAddSubsemigroup.{u1} M _inst_1))) (Subsemigroup.closure.{u1} M _inst_1 S)) (AddSubsemigroup.closure.{u1} (Additive.{u1} M) (Additive.add.{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 subsemigroup.to_add_subsemigroup_closure Subsemigroup.toAddSubsemigroup_closureₓ'. -/
 theorem Subsemigroup.toAddSubsemigroup_closure (S : Set M) :
     (Subsemigroup.closure S).toAddSubsemigroup = AddSubsemigroup.closure (Additive.toMul ⁻¹' S) :=
@@ -133,7 +133,7 @@ theorem Subsemigroup.toAddSubsemigroup_closure (S : Set M) :
 lean 3 declaration is
   forall {M : Type.{u1}} [_inst_1 : Mul.{u1} M] (S : Set.{u1} (Additive.{u1} M)), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1))))) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))))) (fun (_x : RelIso.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)))))) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))))) => (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) -> (Subsemigroup.{u1} M _inst_1)) (RelIso.hasCoeToFun.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)) (Additive.{u1} M) (AddSubsemigroup.setLike.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1)))))) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))))) (AddSubsemigroup.toSubsemigroup'.{u1} M _inst_1) (AddSubsemigroup.closure.{u1} (Additive.{u1} M) (Additive.hasAdd.{u1} M _inst_1) S)) (Subsemigroup.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 : Mul.{u1} M] (S : Set.{u1} (Additive.{u1} M)), Eq.{succ u1} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.closure.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1) S)) (FunLike.coe.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1)) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (fun (_x : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => Subsemigroup.{u1} M _inst_1) _x) (EmbeddingLike.toFunLike.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1)) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (Function.instEmbeddingLikeEmbedding.{succ u1, succ u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1))) (RelEmbedding.toEmbedding.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{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 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.toRelEmbedding.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{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 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (AddSubsemigroup.toSubsemigroup'.{u1} M _inst_1))) (AddSubsemigroup.closure.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1) S)) (Subsemigroup.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 : Mul.{u1} M] (S : Set.{u1} (Additive.{u1} M)), Eq.{succ u1} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => Subsemigroup.{u1} M _inst_1) (AddSubsemigroup.closure.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1) S)) (FunLike.coe.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1)) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (fun (_x : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => Subsemigroup.{u1} M _inst_1) _x) (EmbeddingLike.toFunLike.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1)) (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (Function.instEmbeddingLikeEmbedding.{succ u1, succ u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1))) (RelEmbedding.toEmbedding.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{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 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.toRelEmbedding.{u1, u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Subsemigroup.{u1} M _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) => LE.le.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1)) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} (Additive.{u1} M) (Additive.add.{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 : Subsemigroup.{u1} M _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} M _inst_1) => LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (AddSubsemigroup.toSubsemigroup'.{u1} M _inst_1))) (AddSubsemigroup.closure.{u1} (Additive.{u1} M) (Additive.add.{u1} M _inst_1) S)) (Subsemigroup.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_subsemigroup.to_subsemigroup'_closure AddSubsemigroup.toSubsemigroup'_closureₓ'. -/
 theorem AddSubsemigroup.toSubsemigroup'_closure (S : Set (Additive M)) :
     (AddSubsemigroup.closure S).toSubsemigroup' =
@@ -188,7 +188,7 @@ abbrev Subsemigroup.toAddSubsemigroup' : Subsemigroup (Multiplicative A) ≃o Ad
 lean 3 declaration is
   forall {A : Type.{u1}} [_inst_1 : Add.{u1} A] (S : Set.{u1} A), Eq.{succ u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1)))) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)))))) (fun (_x : RelIso.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1))))) (LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1))))))) => (AddSubsemigroup.{u1} A _inst_1) -> (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1))) (RelIso.hasCoeToFun.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1))))) (LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1))))))) (AddSubsemigroup.toSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.closure.{u1} A _inst_1 S)) (Subsemigroup.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1) (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_1 : Add.{u1} A] (S : Set.{u1} A), Eq.{succ u1} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : AddSubsemigroup.{u1} A _inst_1) => Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.closure.{u1} A _inst_1 S)) (FunLike.coe.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1))) (AddSubsemigroup.{u1} A _inst_1) (fun (_x : AddSubsemigroup.{u1} A _inst_1) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : AddSubsemigroup.{u1} A _inst_1) => Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) _x) (EmbeddingLike.toFunLike.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1))) (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Function.instEmbeddingLikeEmbedding.{succ u1, succ u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))) (RelEmbedding.toEmbedding.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.toRelEmbedding.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (AddSubsemigroup.toSubsemigroup.{u1} A _inst_1))) (AddSubsemigroup.closure.{u1} A _inst_1 S)) (Subsemigroup.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1) (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_1 : Add.{u1} A] (S : Set.{u1} A), Eq.{succ u1} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : AddSubsemigroup.{u1} A _inst_1) => Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.closure.{u1} A _inst_1 S)) (FunLike.coe.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1))) (AddSubsemigroup.{u1} A _inst_1) (fun (_x : AddSubsemigroup.{u1} A _inst_1) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : AddSubsemigroup.{u1} A _inst_1) => Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) _x) (EmbeddingLike.toFunLike.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1))) (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Function.instEmbeddingLikeEmbedding.{succ u1, succ u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))) (RelEmbedding.toEmbedding.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.toRelEmbedding.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (AddSubsemigroup.toSubsemigroup.{u1} A _inst_1))) (AddSubsemigroup.closure.{u1} A _inst_1 S)) (Subsemigroup.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1) (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_subsemigroup.to_subsemigroup_closure AddSubsemigroup.toSubsemigroup_closureₓ'. -/
 theorem AddSubsemigroup.toSubsemigroup_closure (S : Set A) :
     (AddSubsemigroup.closure S).toSubsemigroup =
@@ -203,7 +203,7 @@ theorem AddSubsemigroup.toSubsemigroup_closure (S : Set A) :
 lean 3 declaration is
   forall {A : Type.{u1}} [_inst_1 : Add.{u1} A] (S : Set.{u1} (Multiplicative.{u1} A)), Eq.{succ u1} (AddSubsemigroup.{u1} A _inst_1) (coeFn.{succ u1, succ u1} (OrderIso.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1))))) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1))))) (fun (_x : RelIso.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)))))) (LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1)))))) => (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) -> (AddSubsemigroup.{u1} A _inst_1)) (RelIso.hasCoeToFun.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)) (Multiplicative.{u1} A) (Subsemigroup.setLike.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1)))))) (LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (SetLike.partialOrder.{u1, u1} (AddSubsemigroup.{u1} A _inst_1) A (AddSubsemigroup.setLike.{u1} A _inst_1)))))) (Subsemigroup.toAddSubsemigroup'.{u1} A _inst_1) (Subsemigroup.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.hasMul.{u1} A _inst_1) S)) (AddSubsemigroup.closure.{u1} A _inst_1 (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_1 : Add.{u1} A] (S : Set.{u1} (Multiplicative.{u1} A)), Eq.{succ u1} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1) S)) (FunLike.coe.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1)) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (fun (_x : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => AddSubsemigroup.{u1} A _inst_1) _x) (EmbeddingLike.toFunLike.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1)) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (Function.instEmbeddingLikeEmbedding.{succ u1, succ u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1))) (RelEmbedding.toEmbedding.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.toRelEmbedding.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (Subsemigroup.toAddSubsemigroup'.{u1} A _inst_1))) (Subsemigroup.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1) S)) (AddSubsemigroup.closure.{u1} A _inst_1 (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_1 : Add.{u1} A] (S : Set.{u1} (Multiplicative.{u1} A)), Eq.{succ u1} ((fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => AddSubsemigroup.{u1} A _inst_1) (Subsemigroup.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1) S)) (FunLike.coe.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1)) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (fun (_x : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => (fun (x._@.Mathlib.Data.FunLike.Embedding._hyg.19 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => AddSubsemigroup.{u1} A _inst_1) _x) (EmbeddingLike.toFunLike.{succ u1, succ u1, succ u1} (Function.Embedding.{succ u1, succ u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1)) (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (Function.instEmbeddingLikeEmbedding.{succ u1, succ u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1))) (RelEmbedding.toEmbedding.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (RelIso.toRelEmbedding.{u1, u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (AddSubsemigroup.{u1} A _inst_1) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1281 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (x._@.Mathlib.Order.Hom.Basic._hyg.1283 : Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) => LE.le.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Preorder.toLE.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1)))))) x._@.Mathlib.Order.Hom.Basic._hyg.1281 x._@.Mathlib.Order.Hom.Basic._hyg.1283) (fun (x._@.Mathlib.Order.Hom.Basic._hyg.1296 : AddSubsemigroup.{u1} A _inst_1) (x._@.Mathlib.Order.Hom.Basic._hyg.1298 : AddSubsemigroup.{u1} A _inst_1) => LE.le.{u1} (AddSubsemigroup.{u1} A _inst_1) (Preorder.toLE.{u1} (AddSubsemigroup.{u1} A _inst_1) (PartialOrder.toPreorder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (AddSubsemigroup.{u1} A _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (AddSubsemigroup.{u1} A _inst_1) (AddSubsemigroup.instCompleteLatticeSubsemigroup.{u1} A _inst_1))))) x._@.Mathlib.Order.Hom.Basic._hyg.1296 x._@.Mathlib.Order.Hom.Basic._hyg.1298) (Subsemigroup.toAddSubsemigroup'.{u1} A _inst_1))) (Subsemigroup.closure.{u1} (Multiplicative.{u1} A) (Multiplicative.mul.{u1} A _inst_1) S)) (AddSubsemigroup.closure.{u1} A _inst_1 (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 subsemigroup.to_add_subsemigroup'_closure Subsemigroup.toAddSubsemigroup'_closureₓ'. -/
 theorem Subsemigroup.toAddSubsemigroup'_closure (S : Set (Multiplicative A)) :
     (Subsemigroup.closure S).toAddSubsemigroup' = AddSubsemigroup.closure (Additive.ofMul ⁻¹' S) :=
@@ -289,7 +289,7 @@ def map (f : M →ₙ* N) (S : Subsemigroup M) : Subsemigroup N
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (S : Subsemigroup.{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) (Subsemigroup.{u2} N _inst_2) (Set.{u2} N) (HasLiftT.mk.{succ u2, succ u2} (Subsemigroup.{u2} N _inst_2) (Set.{u2} N) (CoeTCₓ.coe.{succ u2, succ u2} (Subsemigroup.{u2} N _inst_2) (Set.{u2} N) (SetLike.Set.hasCoeT.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) (Set.image.{u1, u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) S))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (S : Subsemigroup.{u2} M _inst_1), Eq.{succ u1} (Set.{u1} N) (SetLike.coe.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)) (Set.image.{u2, u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) (SetLike.coe.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) S))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (S : Subsemigroup.{u2} M _inst_1), Eq.{succ u1} (Set.{u1} N) (SetLike.coe.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)) (Set.image.{u2, u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) (SetLike.coe.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) S))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.coe_map Subsemigroup.coe_mapₓ'. -/
 @[simp, to_additive]
 theorem coe_map (f : M →ₙ* N) (S : Subsemigroup M) : (S.map f : Set N) = f '' S :=
@@ -301,7 +301,7 @@ theorem coe_map (f : M →ₙ* N) (S : Subsemigroup M) : (S.map f : Set N) = f '
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2} {S : Subsemigroup.{u1} M _inst_1} {y : N}, Iff (Membership.Mem.{u2, u2} N (Subsemigroup.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) y (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) (Exists.{succ u1} M (fun (x : M) => Exists.{0} (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x S) (fun (H : Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x S) => Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) y)))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2} {S : Subsemigroup.{u2} M _inst_1} {y : N}, Iff (Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) y (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)) (Exists.{succ u2} M (fun (x : M) => And (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S) (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) y)))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2} {S : Subsemigroup.{u2} M _inst_1} {y : N}, Iff (Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) y (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)) (Exists.{succ u2} M (fun (x : M) => And (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S) (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) y)))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.mem_map Subsemigroup.mem_mapₓ'. -/
 @[simp, to_additive]
 theorem mem_map {f : M →ₙ* N} {S : Subsemigroup M} {y : N} : y ∈ S.map f ↔ ∃ x ∈ S, f x = y :=
@@ -313,7 +313,7 @@ theorem mem_map {f : M →ₙ* N} {S : Subsemigroup M} {y : N} : y ∈ S.map f 
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) {S : Subsemigroup.{u1} M _inst_1} {x : M}, (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x S) -> (Membership.Mem.{u2, u2} N (Subsemigroup.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (Subsemigroup.map.{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 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) {S : Subsemigroup.{u2} M _inst_1} {x : M}, (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S) -> (Membership.mem.{u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) {S : Subsemigroup.{u2} M _inst_1} {x : M}, (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S) -> (Membership.mem.{u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.mem_map_of_mem Subsemigroup.mem_map_of_memₓ'. -/
 @[to_additive]
 theorem mem_map_of_mem (f : M →ₙ* N) {S : Subsemigroup M} {x : M} (hx : x ∈ S) : f x ∈ S.map f :=
@@ -325,7 +325,7 @@ theorem mem_map_of_mem (f : M →ₙ* N) {S : Subsemigroup M} {x : M} (hx : x 
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (S : Subsemigroup.{u1} M _inst_1) (x : coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S), Membership.Mem.{u2, u2} N (Subsemigroup.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x S))))) x)) (Subsemigroup.map.{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 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (S : Subsemigroup.{u2} M _inst_1) (x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)), Membership.mem.{u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (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} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) S)) x)) (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f (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} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) S)) x)) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (S : Subsemigroup.{u2} M _inst_1) (x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)), Membership.mem.{u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (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} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) S)) x)) (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f (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} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) S)) x)) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)
 Case conversion may be inaccurate. Consider using '#align subsemigroup.apply_coe_mem_map Subsemigroup.apply_coe_mem_mapₓ'. -/
 @[to_additive]
 theorem apply_coe_mem_map (f : M →ₙ* N) (S : Subsemigroup M) (x : S) : f x ∈ S.map f :=
@@ -349,7 +349,7 @@ theorem map_map (g : N →ₙ* P) (f : M →ₙ* N) : (S.map f).map g = S.map (g
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall {S : Subsemigroup.{u1} M _inst_1} {x : M}, Iff (Membership.Mem.{u2, u2} N (Subsemigroup.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x S))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall {S : Subsemigroup.{u2} M _inst_1} {x : M}, Iff (Membership.mem.{u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)) (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall {S : Subsemigroup.{u2} M _inst_1} {x : M}, Iff (Membership.mem.{u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)) (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.mem_map_iff_mem Subsemigroup.mem_map_iff_memₓ'. -/
 @[to_additive]
 theorem mem_map_iff_mem {f : M →ₙ* N} (hf : Function.Injective f) {S : Subsemigroup M} {x : M} :
@@ -568,7 +568,7 @@ include hf
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (GaloisCoinsertion.{u1, u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (GaloisCoinsertion.{u1, u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (GaloisCoinsertion.{u1, u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.gci_map_comap Subsemigroup.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. "]
@@ -581,7 +581,7 @@ def gciMapComap : GaloisCoinsertion (map f) (comap f) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : Subsemigroup.{u1} M _inst_1), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) S)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} M _inst_1), Eq.{succ u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)) S)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} M _inst_1), Eq.{succ u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)) S)
 Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_map_eq_of_injective Subsemigroup.comap_map_eq_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_map_eq_of_injective (S : Subsemigroup M) : (S.map f).comap f = S :=
@@ -601,7 +601,7 @@ theorem comap_surjective_of_injective : Function.Surjective (comap f) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (Function.Injective.{succ u1, succ u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (Function.Injective.{succ u2, succ u1} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (Function.Injective.{succ u2, succ u1} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.map_injective_of_injective Subsemigroup.map_injective_of_injectiveₓ'. -/
 @[to_additive]
 theorem map_injective_of_injective : Function.Injective (map f) :=
@@ -613,7 +613,7 @@ theorem map_injective_of_injective : Function.Injective (map f) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : Subsemigroup.{u1} M _inst_1) (T : Subsemigroup.{u1} M _inst_1), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (Inf.inf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasInf.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f T))) (Inf.inf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasInf.{u1} M _inst_1) S T))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} M _inst_1) (T : Subsemigroup.{u2} M _inst_1), Eq.{succ u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Inf.inf.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instInfSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f T))) (Inf.inf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instInfSubsemigroup.{u2} M _inst_1) S T))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} M _inst_1) (T : Subsemigroup.{u2} M _inst_1), Eq.{succ u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Inf.inf.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instInfSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f T))) (Inf.inf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instInfSubsemigroup.{u2} M _inst_1) S T))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_inf_map_of_injective Subsemigroup.comap_inf_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_inf_map_of_injective (S T : Subsemigroup M) : (S.map f ⊓ T.map f).comap f = S ⊓ T :=
@@ -625,7 +625,7 @@ theorem comap_inf_map_of_injective (S T : Subsemigroup M) : (S.map f ⊓ T.map f
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u3}} {f : MulHom.{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)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : ι -> (Subsemigroup.{u1} M _inst_1)), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (infᵢ.{u2, succ u3} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasInf.{u2} N _inst_2) ι (fun (i : ι) => Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (S i)))) (infᵢ.{u1, succ u3} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasInf.{u1} M _inst_1) ι S))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u1}} {f : MulHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} M _inst_1)), Eq.{succ u3} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.comap.{u3, u2} M N _inst_1 _inst_2 f (infᵢ.{u2, succ u1} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instInfSetSubsemigroup.{u2} N _inst_2) ι (fun (i : ι) => Subsemigroup.map.{u3, u2} M N _inst_1 _inst_2 f (S i)))) (infᵢ.{u3, succ u1} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.instInfSetSubsemigroup.{u3} M _inst_1) ι S))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u1}} {f : MulHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} M _inst_1)), Eq.{succ u3} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.comap.{u3, u2} M N _inst_1 _inst_2 f (infᵢ.{u2, succ u1} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instInfSetSubsemigroup.{u2} N _inst_2) ι (fun (i : ι) => Subsemigroup.map.{u3, u2} M N _inst_1 _inst_2 f (S i)))) (infᵢ.{u3, succ u1} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.instInfSetSubsemigroup.{u3} M _inst_1) ι S))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_infi_map_of_injective Subsemigroup.comap_infᵢ_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_infᵢ_map_of_injective (S : ι → Subsemigroup M) :
@@ -638,7 +638,7 @@ theorem comap_infᵢ_map_of_injective (S : ι → Subsemigroup M) :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : Subsemigroup.{u1} M _inst_1) (T : Subsemigroup.{u1} M _inst_1), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (Sup.sup.{u2} (Subsemigroup.{u2} N _inst_2) (SemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.completeLattice.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f T))) (Sup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1)))) S T))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} M _inst_1) (T : Subsemigroup.{u2} M _inst_1), Eq.{succ u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Sup.sup.{u1} (Subsemigroup.{u1} N _inst_2) (SemilatticeSup.toSup.{u1} (Subsemigroup.{u1} N _inst_2) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2)))) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f T))) (Sup.sup.{u2} (Subsemigroup.{u2} M _inst_1) (SemilatticeSup.toSup.{u2} (Subsemigroup.{u2} M _inst_1) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)))) S T))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} M _inst_1) (T : Subsemigroup.{u2} M _inst_1), Eq.{succ u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Sup.sup.{u1} (Subsemigroup.{u1} N _inst_2) (SemilatticeSup.toSup.{u1} (Subsemigroup.{u1} N _inst_2) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2)))) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f T))) (Sup.sup.{u2} (Subsemigroup.{u2} M _inst_1) (SemilatticeSup.toSup.{u2} (Subsemigroup.{u2} M _inst_1) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)))) S T))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_sup_map_of_injective Subsemigroup.comap_sup_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_sup_map_of_injective (S T : Subsemigroup M) : (S.map f ⊔ T.map f).comap f = S ⊔ T :=
@@ -650,7 +650,7 @@ theorem comap_sup_map_of_injective (S T : Subsemigroup M) : (S.map f ⊔ T.map f
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u3}} {f : MulHom.{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)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : ι -> (Subsemigroup.{u1} M _inst_1)), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (supᵢ.{u2, succ u3} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.completeLattice.{u2} N _inst_2))) ι (fun (i : ι) => Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (S i)))) (supᵢ.{u1, succ u3} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1))) ι S))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u1}} {f : MulHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} M _inst_1)), Eq.{succ u3} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.comap.{u3, u2} M N _inst_1 _inst_2 f (supᵢ.{u2, succ u1} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)) ι (fun (i : ι) => Subsemigroup.map.{u3, u2} M N _inst_1 _inst_2 f (S i)))) (supᵢ.{u3, succ u1} (Subsemigroup.{u3} M _inst_1) (CompleteLattice.toSupSet.{u3} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u3} M _inst_1)) ι S))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u1}} {f : MulHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} M _inst_1)), Eq.{succ u3} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.comap.{u3, u2} M N _inst_1 _inst_2 f (supᵢ.{u2, succ u1} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)) ι (fun (i : ι) => Subsemigroup.map.{u3, u2} M N _inst_1 _inst_2 f (S i)))) (supᵢ.{u3, succ u1} (Subsemigroup.{u3} M _inst_1) (CompleteLattice.toSupSet.{u3} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u3} M _inst_1)) ι S))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_supr_map_of_injective Subsemigroup.comap_supᵢ_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_supᵢ_map_of_injective (S : ι → Subsemigroup M) :
@@ -663,7 +663,7 @@ theorem comap_supᵢ_map_of_injective (S : ι → Subsemigroup M) :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall {S : Subsemigroup.{u1} M _inst_1} {T : Subsemigroup.{u1} M _inst_1}, Iff (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toLE.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f T)) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) S T))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall {S : Subsemigroup.{u2} M _inst_1} {T : Subsemigroup.{u2} M _inst_1}, Iff (LE.le.{u1} (Subsemigroup.{u1} N _inst_2) (Preorder.toLE.{u1} (Subsemigroup.{u1} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2))))) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f T)) (LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1))))) S T))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall {S : Subsemigroup.{u2} M _inst_1} {T : Subsemigroup.{u2} M _inst_1}, Iff (LE.le.{u1} (Subsemigroup.{u1} N _inst_2) (Preorder.toLE.{u1} (Subsemigroup.{u1} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2))))) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f T)) (LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1))))) S T))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.map_le_map_iff_of_injective Subsemigroup.map_le_map_iff_of_injectiveₓ'. -/
 @[to_additive]
 theorem map_le_map_iff_of_injective {S T : Subsemigroup M} : S.map f ≤ T.map f ↔ S ≤ T :=
@@ -675,7 +675,7 @@ theorem map_le_map_iff_of_injective {S T : Subsemigroup M} : S.map f ≤ T.map f
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (StrictMono.{u1, u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (StrictMono.{u2, u1} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.{u1} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)))) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2)))) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (StrictMono.{u2, u1} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.{u1} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)))) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2)))) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.map_strict_mono_of_injective Subsemigroup.map_strictMono_of_injectiveₓ'. -/
 @[to_additive]
 theorem map_strictMono_of_injective : StrictMono (map f) :=
@@ -695,7 +695,7 @@ include hf
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (GaloisInsertion.{u1, u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (GaloisInsertion.{u1, u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (GaloisInsertion.{u1, u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.gi_map_comap Subsemigroup.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. "]
@@ -718,7 +718,7 @@ theorem map_comap_eq_of_surjective (S : Subsemigroup N) : (S.comap f).map f = S
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (Function.Surjective.{succ u1, succ u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Surjective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (Function.Surjective.{succ u2, succ u1} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Surjective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (Function.Surjective.{succ u2, succ u1} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.map_surjective_of_surjective Subsemigroup.map_surjective_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_surjective_of_surjective : Function.Surjective (map f) :=
@@ -738,7 +738,7 @@ theorem comap_injective_of_surjective : Function.Injective (comap f) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Inf.inf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasInf.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))) (Inf.inf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasInf.{u2} N _inst_2) S T))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Inf.inf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instInfSubsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))) (Inf.inf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instInfSubsemigroup.{u2} N _inst_2) S T))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Inf.inf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instInfSubsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))) (Inf.inf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instInfSubsemigroup.{u2} N _inst_2) S T))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.map_inf_comap_of_surjective Subsemigroup.map_inf_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_inf_comap_of_surjective (S T : Subsemigroup N) :
@@ -751,7 +751,7 @@ theorem map_inf_comap_of_surjective (S T : Subsemigroup N) :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u3}} {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : ι -> (Subsemigroup.{u2} N _inst_2)), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (infᵢ.{u1, succ u3} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasInf.{u1} M _inst_1) ι (fun (i : ι) => Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (S i)))) (infᵢ.{u2, succ u3} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasInf.{u2} N _inst_2) ι S))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u3} N] {ι : Type.{u1}} {f : MulHom.{u2, u3} M N _inst_1 _inst_2}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MulHom.{u2, u3} 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 u3, u2, u3} (MulHom.{u2, u3} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u3} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} N _inst_2)), Eq.{succ u3} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.map.{u2, u3} M N _inst_1 _inst_2 f (infᵢ.{u2, succ u1} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instInfSetSubsemigroup.{u2} M _inst_1) ι (fun (i : ι) => Subsemigroup.comap.{u2, u3} M N _inst_1 _inst_2 f (S i)))) (infᵢ.{u3, succ u1} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.instInfSetSubsemigroup.{u3} N _inst_2) ι S))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u3} N] {ι : Type.{u1}} {f : MulHom.{u2, u3} M N _inst_1 _inst_2}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MulHom.{u2, u3} 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 u3, u2, u3} (MulHom.{u2, u3} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u3} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} N _inst_2)), Eq.{succ u3} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.map.{u2, u3} M N _inst_1 _inst_2 f (infᵢ.{u2, succ u1} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instInfSetSubsemigroup.{u2} M _inst_1) ι (fun (i : ι) => Subsemigroup.comap.{u2, u3} M N _inst_1 _inst_2 f (S i)))) (infᵢ.{u3, succ u1} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.instInfSetSubsemigroup.{u3} N _inst_2) ι S))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.map_infi_comap_of_surjective Subsemigroup.map_infᵢ_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_infᵢ_comap_of_surjective (S : ι → Subsemigroup N) :
@@ -764,7 +764,7 @@ theorem map_infᵢ_comap_of_surjective (S : ι → Subsemigroup N) :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Sup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1)))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))) (Sup.sup.{u2} (Subsemigroup.{u2} N _inst_2) (SemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.completeLattice.{u2} N _inst_2)))) S T))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Sup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))) (Sup.sup.{u2} (Subsemigroup.{u2} N _inst_2) (SemilatticeSup.toSup.{u2} (Subsemigroup.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)))) S T))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Sup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))) (Sup.sup.{u2} (Subsemigroup.{u2} N _inst_2) (SemilatticeSup.toSup.{u2} (Subsemigroup.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)))) S T))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.map_sup_comap_of_surjective Subsemigroup.map_sup_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_sup_comap_of_surjective (S T : Subsemigroup N) :
@@ -777,7 +777,7 @@ theorem map_sup_comap_of_surjective (S T : Subsemigroup N) :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u3}} {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : ι -> (Subsemigroup.{u2} N _inst_2)), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (supᵢ.{u1, succ u3} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1))) ι (fun (i : ι) => Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (S i)))) (supᵢ.{u2, succ u3} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.completeLattice.{u2} N _inst_2))) ι S))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u3} N] {ι : Type.{u1}} {f : MulHom.{u2, u3} M N _inst_1 _inst_2}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MulHom.{u2, u3} 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 u3, u2, u3} (MulHom.{u2, u3} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u3} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} N _inst_2)), Eq.{succ u3} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.map.{u2, u3} M N _inst_1 _inst_2 f (supᵢ.{u2, succ u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => Subsemigroup.comap.{u2, u3} M N _inst_1 _inst_2 f (S i)))) (supᵢ.{u3, succ u1} (Subsemigroup.{u3} N _inst_2) (CompleteLattice.toSupSet.{u3} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u3} N _inst_2)) ι S))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u3} N] {ι : Type.{u1}} {f : MulHom.{u2, u3} M N _inst_1 _inst_2}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MulHom.{u2, u3} 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 u3, u2, u3} (MulHom.{u2, u3} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u3} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} N _inst_2)), Eq.{succ u3} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.map.{u2, u3} M N _inst_1 _inst_2 f (supᵢ.{u2, succ u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => Subsemigroup.comap.{u2, u3} M N _inst_1 _inst_2 f (S i)))) (supᵢ.{u3, succ u1} (Subsemigroup.{u3} N _inst_2) (CompleteLattice.toSupSet.{u3} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u3} N _inst_2)) ι S))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.map_supr_comap_of_surjective Subsemigroup.map_supᵢ_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_supᵢ_comap_of_surjective (S : ι → Subsemigroup N) :
@@ -790,7 +790,7 @@ theorem map_supᵢ_comap_of_surjective (S : ι → Subsemigroup N) :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall {S : Subsemigroup.{u2} N _inst_2} {T : Subsemigroup.{u2} N _inst_2}, Iff (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T)) (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toLE.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) S T))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (forall {S : Subsemigroup.{u2} N _inst_2} {T : Subsemigroup.{u2} N _inst_2}, Iff (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T)) (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toLE.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2))))) S T))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (forall {S : Subsemigroup.{u2} N _inst_2} {T : Subsemigroup.{u2} N _inst_2}, Iff (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T)) (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toLE.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2))))) S T))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_le_comap_iff_of_surjective Subsemigroup.comap_le_comap_iff_of_surjectiveₓ'. -/
 @[to_additive]
 theorem comap_le_comap_iff_of_surjective {S T : Subsemigroup N} : S.comap f ≤ T.comap f ↔ S ≤ T :=
@@ -802,7 +802,7 @@ theorem comap_le_comap_iff_of_surjective {S T : Subsemigroup N} : S.comap f ≤
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (StrictMono.{u2, u1} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2))) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (StrictMono.{u2, u1} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)))) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (StrictMono.{u2, u1} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)))) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_strict_mono_of_surjective Subsemigroup.comap_strictMono_of_surjectiveₓ'. -/
 @[to_additive]
 theorem comap_strictMono_of_surjective : StrictMono (comap f) :=
@@ -914,7 +914,7 @@ def subtype : S' →ₙ* M :=
 lean 3 declaration is
   forall {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : SetLike.{u2, u1} A M] [hA : MulMemClass.{u2, u1} A M _inst_1 _inst_2] (S' : A), Eq.{succ u1} ((fun (_x : MulHom.{u1, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (MulMemClass.mul.{u1, u2} M A _inst_1 _inst_2 hA S') _inst_1) => (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') -> M) (MulMemClass.subtype.{u1, u2} M A _inst_1 _inst_2 hA S')) (coeFn.{succ u1, succ u1} (MulHom.{u1, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (MulMemClass.mul.{u1, u2} M A _inst_1 _inst_2 hA S') _inst_1) (fun (_x : MulHom.{u1, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (MulMemClass.mul.{u1, u2} M A _inst_1 _inst_2 hA S') _inst_1) => (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') -> M) (MulHom.hasCoeToFun.{u1, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (MulMemClass.mul.{u1, u2} M A _inst_1 _inst_2 hA S') _inst_1) (MulMemClass.subtype.{u1, u2} M A _inst_1 _inst_2 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_2) S') M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (coeBase.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_2) x S'))))))
 but is expected to have type
-  forall {M : Type.{u2}} {A : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : SetLike.{u1, u2} A M] [hA : MulMemClass.{u1, u2} A M _inst_1 _inst_2] (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_2) 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_2) x S')) => M) a) (FunLike.coe.{succ u2, succ u2, succ u2} (MulHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) M (MulMemClass.mul.{u2, u1} M A _inst_1 _inst_2 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) 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_2) x S')) => M) _x) (MulHomClass.toFunLike.{u2, u2, u2} (MulHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) M (MulMemClass.mul.{u2, u1} M A _inst_1 _inst_2 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) M (MulMemClass.mul.{u2, u1} M A _inst_1 _inst_2 hA S') _inst_1 (MulHom.mulHomClass.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) M (MulMemClass.mul.{u2, u1} M A _inst_1 _inst_2 hA S') _inst_1)) (MulMemClass.subtype.{u2, u1} M A _inst_1 _inst_2 hA S')) (Subtype.val.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S'))
+  forall {M : Type.{u2}} {A : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : SetLike.{u1, u2} A M] [hA : MulMemClass.{u1, u2} A M _inst_1 _inst_2] (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_2) 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_2) x S')) => M) a) (FunLike.coe.{succ u2, succ u2, succ u2} (MulHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) M (MulMemClass.mul.{u2, u1} M A _inst_1 _inst_2 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) 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_2) x S')) => M) _x) (MulHomClass.toFunLike.{u2, u2, u2} (MulHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) M (MulMemClass.mul.{u2, u1} M A _inst_1 _inst_2 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) M (MulMemClass.mul.{u2, u1} M A _inst_1 _inst_2 hA S') _inst_1 (MulHom.mulHomClass.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) M (MulMemClass.mul.{u2, u1} M A _inst_1 _inst_2 hA S') _inst_1)) (MulMemClass.subtype.{u2, u1} M A _inst_1 _inst_2 hA S')) (Subtype.val.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S'))
 Case conversion may be inaccurate. Consider using '#align mul_mem_class.coe_subtype MulMemClass.coe_subtypeₓ'. -/
 @[simp, to_additive]
 theorem coe_subtype : (MulMemClass.subtype S' : S' → M) = coe :=
@@ -964,7 +964,7 @@ noncomputable def equivMapOfInjective (f : M →ₙ* N) (hf : Function.Injective
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (S : Subsemigroup.{u1} M _inst_1) (f : MulHom.{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)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) (x : coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.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)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Subsemigroup.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) x (Subsemigroup.map.{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)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M _inst_1) _inst_1 (Subsemigroup.setLike.{u1} M _inst_1) (Subsemigroup.mulMemClass.{u1} M _inst_1) S) (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S))) (fun (_x : MulEquiv.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M _inst_1) _inst_1 (Subsemigroup.setLike.{u1} M _inst_1) (Subsemigroup.mulMemClass.{u1} M _inst_1) S) (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S))) => (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) -> (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S))) (MulEquiv.hasCoeToFun.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M _inst_1) _inst_1 (Subsemigroup.setLike.{u1} M _inst_1) (Subsemigroup.mulMemClass.{u1} M _inst_1) S) (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S))) (Subsemigroup.equivMapOfInjective.{u1, u2} M N _inst_1 _inst_2 S f hf) x)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x S))))) x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (S : Subsemigroup.{u2} M _inst_1) (f : MulHom.{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} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) (x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{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} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)))))) (Subsemigroup.equivMapOfInjective.{u2, u1} M N _inst_1 _inst_2 S f hf) x)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f (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} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) S)) x))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (S : Subsemigroup.{u2} M _inst_1) (f : MulHom.{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} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) (x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{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} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)))))) (Subsemigroup.equivMapOfInjective.{u2, u1} M N _inst_1 _inst_2 S f hf) x)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f (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} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) S)) x))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.coe_equiv_map_of_injective_apply Subsemigroup.coe_equivMapOfInjective_applyₓ'. -/
 @[simp, to_additive]
 theorem coe_equivMapOfInjective_apply (f : M →ₙ* N) (hf : Function.Injective f) (x : S) :
@@ -1185,7 +1185,7 @@ def srange (f : M →ₙ* N) : Subsemigroup N :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u2} (Set.{u2} N) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Subsemigroup.{u2} N _inst_2) (Set.{u2} N) (HasLiftT.mk.{succ u2, succ u2} (Subsemigroup.{u2} N _inst_2) (Set.{u2} N) (CoeTCₓ.coe.{succ u2, succ u2} (Subsemigroup.{u2} N _inst_2) (Set.{u2} N) (SetLike.Set.hasCoeT.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f)) (Set.range.{u2, succ u1} N M (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} (Set.{u1} N) (SetLike.coe.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f)) (Set.range.{u1, succ u2} N M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} (Set.{u1} N) (SetLike.coe.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f)) (Set.range.{u1, succ u2} N M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f))
 Case conversion may be inaccurate. Consider using '#align mul_hom.coe_srange MulHom.coe_srangeₓ'. -/
 @[simp, to_additive]
 theorem coe_srange (f : M →ₙ* N) : (f.srange : Set N) = Set.range f :=
@@ -1197,7 +1197,7 @@ theorem coe_srange (f : M →ₙ* N) : (f.srange : Set N) = Set.range f :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2} {y : N}, Iff (Membership.Mem.{u2, u2} N (Subsemigroup.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) y (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f)) (Exists.{succ u1} M (fun (x : M) => Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) y))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2} {y : N}, Iff (Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) y (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f)) (Exists.{succ u2} M (fun (x : M) => Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) y))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2} {y : N}, Iff (Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) y (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f)) (Exists.{succ u2} M (fun (x : M) => Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) y))
 Case conversion may be inaccurate. Consider using '#align mul_hom.mem_srange MulHom.mem_srangeₓ'. -/
 @[simp, to_additive]
 theorem mem_srange {f : M →ₙ* N} {y : N} : y ∈ f.srange ↔ ∃ x, f x = y :=
@@ -1252,7 +1252,7 @@ theorem srange_top_of_surjective {N} [Mul N] (f : M →ₙ* N) (hf : Function.Su
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (s : Set.{u2} N), LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) (Subsemigroup.closure.{u1} M _inst_1 (Set.preimage.{u1, u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) s)) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (Subsemigroup.closure.{u2} N _inst_2 s))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (s : Set.{u1} N), LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1))))) (Subsemigroup.closure.{u2} M _inst_1 (Set.preimage.{u2, u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) s)) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Subsemigroup.closure.{u1} N _inst_2 s))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (s : Set.{u1} N), LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1))))) (Subsemigroup.closure.{u2} M _inst_1 (Set.preimage.{u2, u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) s)) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Subsemigroup.closure.{u1} N _inst_2 s))
 Case conversion may be inaccurate. Consider using '#align mul_hom.mclosure_preimage_le MulHom.mclosure_preimage_leₓ'. -/
 @[to_additive]
 theorem mclosure_preimage_le (f : M →ₙ* N) (s : Set N) : closure (f ⁻¹' s) ≤ (closure s).comap f :=
@@ -1264,7 +1264,7 @@ theorem mclosure_preimage_le (f : M →ₙ* N) (s : Set N) : closure (f ⁻¹' s
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (s : Set.{u1} M), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Subsemigroup.closure.{u1} M _inst_1 s)) (Subsemigroup.closure.{u2} N _inst_2 (Set.image.{u1, u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) s))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (s : Set.{u2} M), Eq.{succ u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f (Subsemigroup.closure.{u2} M _inst_1 s)) (Subsemigroup.closure.{u1} N _inst_2 (Set.image.{u2, u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) s))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (s : Set.{u2} M), Eq.{succ u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f (Subsemigroup.closure.{u2} M _inst_1 s)) (Subsemigroup.closure.{u1} N _inst_2 (Set.image.{u2, u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) s))
 Case conversion may be inaccurate. Consider using '#align mul_hom.map_mclosure MulHom.map_mclosureₓ'. -/
 /-- The image under a semigroup hom of the subsemigroup generated by a set equals the subsemigroup
 generated by the image of the set. -/
@@ -1329,7 +1329,7 @@ theorem coe_srangeRestrict {N} [Mul N] (f : M →ₙ* N) (x : M) : (f.srangeRest
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2), Function.Surjective.{succ u1, succ u2} M (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f)) _inst_1 (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f))) (fun (_x : MulHom.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f)) _inst_1 (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f))) => M -> (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f))) (MulHom.hasCoeToFun.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f)) _inst_1 (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f))) (MulHom.srangeRestrict.{u1, u2} M _inst_1 N _inst_2 f))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2), Function.Surjective.{succ u2, succ u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _inst_1 (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{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 (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _inst_1 (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _inst_1 (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f)) (MulHom.mulHomClass.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _inst_1 (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f)))) (MulHom.srangeRestrict.{u2, u1} M _inst_1 N _inst_2 f))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2), Function.Surjective.{succ u2, succ u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _inst_1 (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{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 (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _inst_1 (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _inst_1 (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f)) (MulHom.mulHomClass.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _inst_1 (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f)))) (MulHom.srangeRestrict.{u2, u1} M _inst_1 N _inst_2 f))
 Case conversion may be inaccurate. Consider using '#align mul_hom.srange_restrict_surjective MulHom.srangeRestrict_surjectiveₓ'. -/
 @[to_additive]
 theorem srangeRestrict_surjective (f : M →ₙ* N) : Function.Surjective f.srangeRestrict :=
@@ -1380,7 +1380,7 @@ def subsemigroupMap (f : M →ₙ* N) (M' : Subsemigroup M) : M' →ₙ* M'.map
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (M' : Subsemigroup.{u1} M _inst_1), Function.Surjective.{succ u1, succ u2} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) M') (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f M')) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) M') (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f M')) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M _inst_1) _inst_1 (Subsemigroup.setLike.{u1} M _inst_1) (Subsemigroup.mulMemClass.{u1} M _inst_1) M') (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f M'))) (fun (_x : MulHom.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) M') (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f M')) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M _inst_1) _inst_1 (Subsemigroup.setLike.{u1} M _inst_1) (Subsemigroup.mulMemClass.{u1} M _inst_1) M') (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f M'))) => (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) M') -> (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f M'))) (MulHom.hasCoeToFun.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) M') (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f M')) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M _inst_1) _inst_1 (Subsemigroup.setLike.{u1} M _inst_1) (Subsemigroup.mulMemClass.{u1} M _inst_1) M') (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f M'))) (MulHom.subsemigroupMap.{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 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (M' : Subsemigroup.{u2} M _inst_1), Function.Surjective.{succ u2, succ u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) M') (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) M') (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) M') (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M')) (MulHom.mulHomClass.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) M') (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M')))) (MulHom.subsemigroupMap.{u2, u1} M N _inst_1 _inst_2 f M'))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (M' : Subsemigroup.{u2} M _inst_1), Function.Surjective.{succ u2, succ u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) M') (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) M') (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) M') (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M')) (MulHom.mulHomClass.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) M') (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M')))) (MulHom.subsemigroupMap.{u2, u1} M N _inst_1 _inst_2 f M'))
 Case conversion may be inaccurate. Consider using '#align mul_hom.subsemigroup_map_surjective MulHom.subsemigroupMap_surjectiveₓ'. -/
 @[to_additive]
 theorem subsemigroupMap_surjective (f : M →ₙ* N) (M' : Subsemigroup M) :
Diff
@@ -289,7 +289,7 @@ def map (f : M →ₙ* N) (S : Subsemigroup M) : Subsemigroup N
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (S : Subsemigroup.{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) (Subsemigroup.{u2} N _inst_2) (Set.{u2} N) (HasLiftT.mk.{succ u2, succ u2} (Subsemigroup.{u2} N _inst_2) (Set.{u2} N) (CoeTCₓ.coe.{succ u2, succ u2} (Subsemigroup.{u2} N _inst_2) (Set.{u2} N) (SetLike.Set.hasCoeT.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) (Set.image.{u1, u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (HasLiftT.mk.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (CoeTCₓ.coe.{succ u1, succ u1} (Subsemigroup.{u1} M _inst_1) (Set.{u1} M) (SetLike.Set.hasCoeT.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) S))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (S : Subsemigroup.{u2} M _inst_1), Eq.{succ u1} (Set.{u1} N) (SetLike.coe.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)) (Set.image.{u2, u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) (SetLike.coe.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) S))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (S : Subsemigroup.{u2} M _inst_1), Eq.{succ u1} (Set.{u1} N) (SetLike.coe.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)) (Set.image.{u2, u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) (SetLike.coe.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) S))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.coe_map Subsemigroup.coe_mapₓ'. -/
 @[simp, to_additive]
 theorem coe_map (f : M →ₙ* N) (S : Subsemigroup M) : (S.map f : Set N) = f '' S :=
@@ -301,7 +301,7 @@ theorem coe_map (f : M →ₙ* N) (S : Subsemigroup M) : (S.map f : Set N) = f '
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2} {S : Subsemigroup.{u1} M _inst_1} {y : N}, Iff (Membership.Mem.{u2, u2} N (Subsemigroup.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) y (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) (Exists.{succ u1} M (fun (x : M) => Exists.{0} (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x S) (fun (H : Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x S) => Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) y)))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2} {S : Subsemigroup.{u2} M _inst_1} {y : N}, Iff (Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) y (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)) (Exists.{succ u2} M (fun (x : M) => And (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S) (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) y)))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2} {S : Subsemigroup.{u2} M _inst_1} {y : N}, Iff (Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) y (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)) (Exists.{succ u2} M (fun (x : M) => And (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S) (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) y)))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.mem_map Subsemigroup.mem_mapₓ'. -/
 @[simp, to_additive]
 theorem mem_map {f : M →ₙ* N} {S : Subsemigroup M} {y : N} : y ∈ S.map f ↔ ∃ x ∈ S, f x = y :=
@@ -313,7 +313,7 @@ theorem mem_map {f : M →ₙ* N} {S : Subsemigroup M} {y : N} : y ∈ S.map f 
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) {S : Subsemigroup.{u1} M _inst_1} {x : M}, (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x S) -> (Membership.Mem.{u2, u2} N (Subsemigroup.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (Subsemigroup.map.{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 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) {S : Subsemigroup.{u2} M _inst_1} {x : M}, (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S) -> (Membership.mem.{u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) {S : Subsemigroup.{u2} M _inst_1} {x : M}, (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S) -> (Membership.mem.{u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.mem_map_of_mem Subsemigroup.mem_map_of_memₓ'. -/
 @[to_additive]
 theorem mem_map_of_mem (f : M →ₙ* N) {S : Subsemigroup M} {x : M} (hx : x ∈ S) : f x ∈ S.map f :=
@@ -325,7 +325,7 @@ theorem mem_map_of_mem (f : M →ₙ* N) {S : Subsemigroup M} {x : M} (hx : x 
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (S : Subsemigroup.{u1} M _inst_1) (x : coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S), Membership.Mem.{u2, u2} N (Subsemigroup.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x S))))) x)) (Subsemigroup.map.{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 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (S : Subsemigroup.{u2} M _inst_1) (x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)), Membership.mem.{u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) (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} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) S)) x)) (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f (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} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) S)) x)) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (S : Subsemigroup.{u2} M _inst_1) (x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)), Membership.mem.{u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (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} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) S)) x)) (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f (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} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) S)) x)) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)
 Case conversion may be inaccurate. Consider using '#align subsemigroup.apply_coe_mem_map Subsemigroup.apply_coe_mem_mapₓ'. -/
 @[to_additive]
 theorem apply_coe_mem_map (f : M →ₙ* N) (S : Subsemigroup M) (x : S) : f x ∈ S.map f :=
@@ -349,7 +349,7 @@ theorem map_map (g : N →ₙ* P) (f : M →ₙ* N) : (S.map f).map g = S.map (g
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall {S : Subsemigroup.{u1} M _inst_1} {x : M}, Iff (Membership.Mem.{u2, u2} N (Subsemigroup.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) (Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x S))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall {S : Subsemigroup.{u2} M _inst_1} {x : M}, Iff (Membership.mem.{u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)) (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall {S : Subsemigroup.{u2} M _inst_1} {x : M}, Iff (Membership.mem.{u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)) (Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.mem_map_iff_mem Subsemigroup.mem_map_iff_memₓ'. -/
 @[to_additive]
 theorem mem_map_iff_mem {f : M →ₙ* N} (hf : Function.Injective f) {S : Subsemigroup M} {x : M} :
@@ -568,7 +568,7 @@ include hf
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (GaloisCoinsertion.{u1, u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (GaloisCoinsertion.{u1, u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (GaloisCoinsertion.{u1, u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.gci_map_comap Subsemigroup.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. "]
@@ -581,7 +581,7 @@ def gciMapComap : GaloisCoinsertion (map f) (comap f) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : Subsemigroup.{u1} M _inst_1), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) S)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} M _inst_1), Eq.{succ u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)) S)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} M _inst_1), Eq.{succ u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)) S)
 Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_map_eq_of_injective Subsemigroup.comap_map_eq_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_map_eq_of_injective (S : Subsemigroup M) : (S.map f).comap f = S :=
@@ -601,7 +601,7 @@ theorem comap_surjective_of_injective : Function.Surjective (comap f) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (Function.Injective.{succ u1, succ u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (Function.Injective.{succ u2, succ u1} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (Function.Injective.{succ u2, succ u1} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.map_injective_of_injective Subsemigroup.map_injective_of_injectiveₓ'. -/
 @[to_additive]
 theorem map_injective_of_injective : Function.Injective (map f) :=
@@ -613,7 +613,7 @@ theorem map_injective_of_injective : Function.Injective (map f) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : Subsemigroup.{u1} M _inst_1) (T : Subsemigroup.{u1} M _inst_1), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (Inf.inf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasInf.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f T))) (Inf.inf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasInf.{u1} M _inst_1) S T))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} M _inst_1) (T : Subsemigroup.{u2} M _inst_1), Eq.{succ u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Inf.inf.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instInfSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f T))) (Inf.inf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instInfSubsemigroup.{u2} M _inst_1) S T))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} M _inst_1) (T : Subsemigroup.{u2} M _inst_1), Eq.{succ u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Inf.inf.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instInfSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f T))) (Inf.inf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instInfSubsemigroup.{u2} M _inst_1) S T))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_inf_map_of_injective Subsemigroup.comap_inf_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_inf_map_of_injective (S T : Subsemigroup M) : (S.map f ⊓ T.map f).comap f = S ⊓ T :=
@@ -625,7 +625,7 @@ theorem comap_inf_map_of_injective (S T : Subsemigroup M) : (S.map f ⊓ T.map f
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u3}} {f : MulHom.{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)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : ι -> (Subsemigroup.{u1} M _inst_1)), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (infᵢ.{u2, succ u3} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasInf.{u2} N _inst_2) ι (fun (i : ι) => Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (S i)))) (infᵢ.{u1, succ u3} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasInf.{u1} M _inst_1) ι S))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u1}} {f : MulHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} M _inst_1)), Eq.{succ u3} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.comap.{u3, u2} M N _inst_1 _inst_2 f (infᵢ.{u2, succ u1} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instInfSetSubsemigroup.{u2} N _inst_2) ι (fun (i : ι) => Subsemigroup.map.{u3, u2} M N _inst_1 _inst_2 f (S i)))) (infᵢ.{u3, succ u1} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.instInfSetSubsemigroup.{u3} M _inst_1) ι S))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u1}} {f : MulHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} M _inst_1)), Eq.{succ u3} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.comap.{u3, u2} M N _inst_1 _inst_2 f (infᵢ.{u2, succ u1} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instInfSetSubsemigroup.{u2} N _inst_2) ι (fun (i : ι) => Subsemigroup.map.{u3, u2} M N _inst_1 _inst_2 f (S i)))) (infᵢ.{u3, succ u1} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.instInfSetSubsemigroup.{u3} M _inst_1) ι S))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_infi_map_of_injective Subsemigroup.comap_infᵢ_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_infᵢ_map_of_injective (S : ι → Subsemigroup M) :
@@ -638,7 +638,7 @@ theorem comap_infᵢ_map_of_injective (S : ι → Subsemigroup M) :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : Subsemigroup.{u1} M _inst_1) (T : Subsemigroup.{u1} M _inst_1), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (Sup.sup.{u2} (Subsemigroup.{u2} N _inst_2) (SemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.completeLattice.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f T))) (Sup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1)))) S T))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} M _inst_1) (T : Subsemigroup.{u2} M _inst_1), Eq.{succ u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Sup.sup.{u1} (Subsemigroup.{u1} N _inst_2) (SemilatticeSup.toSup.{u1} (Subsemigroup.{u1} N _inst_2) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2)))) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f T))) (Sup.sup.{u2} (Subsemigroup.{u2} M _inst_1) (SemilatticeSup.toSup.{u2} (Subsemigroup.{u2} M _inst_1) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)))) S T))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} M _inst_1) (T : Subsemigroup.{u2} M _inst_1), Eq.{succ u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Sup.sup.{u1} (Subsemigroup.{u1} N _inst_2) (SemilatticeSup.toSup.{u1} (Subsemigroup.{u1} N _inst_2) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2)))) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f T))) (Sup.sup.{u2} (Subsemigroup.{u2} M _inst_1) (SemilatticeSup.toSup.{u2} (Subsemigroup.{u2} M _inst_1) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)))) S T))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_sup_map_of_injective Subsemigroup.comap_sup_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_sup_map_of_injective (S T : Subsemigroup M) : (S.map f ⊔ T.map f).comap f = S ⊔ T :=
@@ -650,7 +650,7 @@ theorem comap_sup_map_of_injective (S T : Subsemigroup M) : (S.map f ⊔ T.map f
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u3}} {f : MulHom.{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)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : ι -> (Subsemigroup.{u1} M _inst_1)), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (supᵢ.{u2, succ u3} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.completeLattice.{u2} N _inst_2))) ι (fun (i : ι) => Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (S i)))) (supᵢ.{u1, succ u3} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1))) ι S))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u1}} {f : MulHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} M _inst_1)), Eq.{succ u3} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.comap.{u3, u2} M N _inst_1 _inst_2 f (supᵢ.{u2, succ u1} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)) ι (fun (i : ι) => Subsemigroup.map.{u3, u2} M N _inst_1 _inst_2 f (S i)))) (supᵢ.{u3, succ u1} (Subsemigroup.{u3} M _inst_1) (CompleteLattice.toSupSet.{u3} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u3} M _inst_1)) ι S))
+  forall {M : Type.{u3}} {N : Type.{u2}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u1}} {f : MulHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} M _inst_1)), Eq.{succ u3} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.comap.{u3, u2} M N _inst_1 _inst_2 f (supᵢ.{u2, succ u1} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)) ι (fun (i : ι) => Subsemigroup.map.{u3, u2} M N _inst_1 _inst_2 f (S i)))) (supᵢ.{u3, succ u1} (Subsemigroup.{u3} M _inst_1) (CompleteLattice.toSupSet.{u3} (Subsemigroup.{u3} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u3} M _inst_1)) ι S))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_supr_map_of_injective Subsemigroup.comap_supᵢ_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_supᵢ_map_of_injective (S : ι → Subsemigroup M) :
@@ -663,7 +663,7 @@ theorem comap_supᵢ_map_of_injective (S : ι → Subsemigroup M) :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall {S : Subsemigroup.{u1} M _inst_1} {T : Subsemigroup.{u1} M _inst_1}, Iff (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toLE.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f T)) (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) S T))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall {S : Subsemigroup.{u2} M _inst_1} {T : Subsemigroup.{u2} M _inst_1}, Iff (LE.le.{u1} (Subsemigroup.{u1} N _inst_2) (Preorder.toLE.{u1} (Subsemigroup.{u1} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2))))) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f T)) (LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1))))) S T))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall {S : Subsemigroup.{u2} M _inst_1} {T : Subsemigroup.{u2} M _inst_1}, Iff (LE.le.{u1} (Subsemigroup.{u1} N _inst_2) (Preorder.toLE.{u1} (Subsemigroup.{u1} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2))))) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f T)) (LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1))))) S T))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.map_le_map_iff_of_injective Subsemigroup.map_le_map_iff_of_injectiveₓ'. -/
 @[to_additive]
 theorem map_le_map_iff_of_injective {S T : Subsemigroup M} : S.map f ≤ T.map f ↔ S ≤ T :=
@@ -675,7 +675,7 @@ theorem map_le_map_iff_of_injective {S T : Subsemigroup M} : S.map f ≤ T.map f
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (StrictMono.{u1, u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (StrictMono.{u2, u1} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.{u1} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)))) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2)))) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (StrictMono.{u2, u1} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.{u1} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)))) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2)))) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.map_strict_mono_of_injective Subsemigroup.map_strictMono_of_injectiveₓ'. -/
 @[to_additive]
 theorem map_strictMono_of_injective : StrictMono (map f) :=
@@ -695,7 +695,7 @@ include hf
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (GaloisInsertion.{u1, u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (GaloisInsertion.{u1, u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (GaloisInsertion.{u1, u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.gi_map_comap Subsemigroup.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. "]
@@ -718,7 +718,7 @@ theorem map_comap_eq_of_surjective (S : Subsemigroup N) : (S.comap f).map f = S
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (Function.Surjective.{succ u1, succ u2} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Surjective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (Function.Surjective.{succ u2, succ u1} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Surjective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (Function.Surjective.{succ u2, succ u1} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.map_surjective_of_surjective Subsemigroup.map_surjective_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_surjective_of_surjective : Function.Surjective (map f) :=
@@ -738,7 +738,7 @@ theorem comap_injective_of_surjective : Function.Injective (comap f) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Inf.inf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasInf.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))) (Inf.inf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasInf.{u2} N _inst_2) S T))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Inf.inf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instInfSubsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))) (Inf.inf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instInfSubsemigroup.{u2} N _inst_2) S T))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Inf.inf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instInfSubsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))) (Inf.inf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instInfSubsemigroup.{u2} N _inst_2) S T))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.map_inf_comap_of_surjective Subsemigroup.map_inf_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_inf_comap_of_surjective (S T : Subsemigroup N) :
@@ -751,7 +751,7 @@ theorem map_inf_comap_of_surjective (S T : Subsemigroup N) :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u3}} {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : ι -> (Subsemigroup.{u2} N _inst_2)), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (infᵢ.{u1, succ u3} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasInf.{u1} M _inst_1) ι (fun (i : ι) => Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (S i)))) (infᵢ.{u2, succ u3} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasInf.{u2} N _inst_2) ι S))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u3} N] {ι : Type.{u1}} {f : MulHom.{u2, u3} M N _inst_1 _inst_2}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MulHom.{u2, u3} 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 u3, u2, u3} (MulHom.{u2, u3} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u3} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} N _inst_2)), Eq.{succ u3} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.map.{u2, u3} M N _inst_1 _inst_2 f (infᵢ.{u2, succ u1} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instInfSetSubsemigroup.{u2} M _inst_1) ι (fun (i : ι) => Subsemigroup.comap.{u2, u3} M N _inst_1 _inst_2 f (S i)))) (infᵢ.{u3, succ u1} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.instInfSetSubsemigroup.{u3} N _inst_2) ι S))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u3} N] {ι : Type.{u1}} {f : MulHom.{u2, u3} M N _inst_1 _inst_2}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MulHom.{u2, u3} 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 u3, u2, u3} (MulHom.{u2, u3} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u3} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} N _inst_2)), Eq.{succ u3} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.map.{u2, u3} M N _inst_1 _inst_2 f (infᵢ.{u2, succ u1} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instInfSetSubsemigroup.{u2} M _inst_1) ι (fun (i : ι) => Subsemigroup.comap.{u2, u3} M N _inst_1 _inst_2 f (S i)))) (infᵢ.{u3, succ u1} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.instInfSetSubsemigroup.{u3} N _inst_2) ι S))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.map_infi_comap_of_surjective Subsemigroup.map_infᵢ_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_infᵢ_comap_of_surjective (S : ι → Subsemigroup N) :
@@ -764,7 +764,7 @@ theorem map_infᵢ_comap_of_surjective (S : ι → Subsemigroup N) :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Sup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1)))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))) (Sup.sup.{u2} (Subsemigroup.{u2} N _inst_2) (SemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.completeLattice.{u2} N _inst_2)))) S T))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Sup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))) (Sup.sup.{u2} (Subsemigroup.{u2} N _inst_2) (SemilatticeSup.toSup.{u2} (Subsemigroup.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)))) S T))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Sup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))) (Sup.sup.{u2} (Subsemigroup.{u2} N _inst_2) (SemilatticeSup.toSup.{u2} (Subsemigroup.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)))) S T))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.map_sup_comap_of_surjective Subsemigroup.map_sup_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_sup_comap_of_surjective (S T : Subsemigroup N) :
@@ -777,7 +777,7 @@ theorem map_sup_comap_of_surjective (S T : Subsemigroup N) :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {ι : Type.{u3}} {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : ι -> (Subsemigroup.{u2} N _inst_2)), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (supᵢ.{u1, succ u3} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1))) ι (fun (i : ι) => Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (S i)))) (supᵢ.{u2, succ u3} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.completeLattice.{u2} N _inst_2))) ι S))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u3} N] {ι : Type.{u1}} {f : MulHom.{u2, u3} M N _inst_1 _inst_2}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MulHom.{u2, u3} 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 u3, u2, u3} (MulHom.{u2, u3} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u3} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} N _inst_2)), Eq.{succ u3} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.map.{u2, u3} M N _inst_1 _inst_2 f (supᵢ.{u2, succ u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => Subsemigroup.comap.{u2, u3} M N _inst_1 _inst_2 f (S i)))) (supᵢ.{u3, succ u1} (Subsemigroup.{u3} N _inst_2) (CompleteLattice.toSupSet.{u3} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u3} N _inst_2)) ι S))
+  forall {M : Type.{u2}} {N : Type.{u3}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u3} N] {ι : Type.{u1}} {f : MulHom.{u2, u3} M N _inst_1 _inst_2}, (Function.Surjective.{succ u2, succ u3} M N (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MulHom.{u2, u3} 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 u3, u2, u3} (MulHom.{u2, u3} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u3} M N _inst_1 _inst_2)) f)) -> (forall (S : ι -> (Subsemigroup.{u3} N _inst_2)), Eq.{succ u3} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.map.{u2, u3} M N _inst_1 _inst_2 f (supᵢ.{u2, succ u1} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toSupSet.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)) ι (fun (i : ι) => Subsemigroup.comap.{u2, u3} M N _inst_1 _inst_2 f (S i)))) (supᵢ.{u3, succ u1} (Subsemigroup.{u3} N _inst_2) (CompleteLattice.toSupSet.{u3} (Subsemigroup.{u3} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u3} N _inst_2)) ι S))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.map_supr_comap_of_surjective Subsemigroup.map_supᵢ_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_supᵢ_comap_of_surjective (S : ι → Subsemigroup N) :
@@ -790,7 +790,7 @@ theorem map_supᵢ_comap_of_surjective (S : ι → Subsemigroup N) :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall {S : Subsemigroup.{u2} N _inst_2} {T : Subsemigroup.{u2} N _inst_2}, Iff (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T)) (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toLE.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) S T))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (forall {S : Subsemigroup.{u2} N _inst_2} {T : Subsemigroup.{u2} N _inst_2}, Iff (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T)) (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toLE.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2))))) S T))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (forall {S : Subsemigroup.{u2} N _inst_2} {T : Subsemigroup.{u2} N _inst_2}, Iff (LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1))))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T)) (LE.le.{u2} (Subsemigroup.{u2} N _inst_2) (Preorder.toLE.{u2} (Subsemigroup.{u2} N _inst_2) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2))))) S T))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_le_comap_iff_of_surjective Subsemigroup.comap_le_comap_iff_of_surjectiveₓ'. -/
 @[to_additive]
 theorem comap_le_comap_iff_of_surjective {S T : Subsemigroup N} : S.comap f ≤ T.comap f ↔ S ≤ T :=
@@ -802,7 +802,7 @@ theorem comap_le_comap_iff_of_surjective {S T : Subsemigroup N} : S.comap f ≤
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (StrictMono.{u2, u1} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (SetLike.partialOrder.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2))) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (StrictMono.{u2, u1} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)))) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (StrictMono.{u2, u1} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)))) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_strict_mono_of_surjective Subsemigroup.comap_strictMono_of_surjectiveₓ'. -/
 @[to_additive]
 theorem comap_strictMono_of_surjective : StrictMono (comap f) :=
@@ -914,7 +914,7 @@ def subtype : S' →ₙ* M :=
 lean 3 declaration is
   forall {M : Type.{u1}} {A : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : SetLike.{u2, u1} A M] [hA : MulMemClass.{u2, u1} A M _inst_1 _inst_2] (S' : A), Eq.{succ u1} ((fun (_x : MulHom.{u1, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (MulMemClass.mul.{u1, u2} M A _inst_1 _inst_2 hA S') _inst_1) => (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') -> M) (MulMemClass.subtype.{u1, u2} M A _inst_1 _inst_2 hA S')) (coeFn.{succ u1, succ u1} (MulHom.{u1, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (MulMemClass.mul.{u1, u2} M A _inst_1 _inst_2 hA S') _inst_1) (fun (_x : MulHom.{u1, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (MulMemClass.mul.{u1, u2} M A _inst_1 _inst_2 hA S') _inst_1) => (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') -> M) (MulHom.hasCoeToFun.{u1, u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (MulMemClass.mul.{u1, u2} M A _inst_1 _inst_2 hA S') _inst_1) (MulMemClass.subtype.{u1, u2} M A _inst_1 _inst_2 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_2) S') M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (coeBase.{succ u1, succ u1} (coeSort.{succ u2, succ (succ u1)} A Type.{u1} (SetLike.hasCoeToSort.{u2, u1} A M _inst_2) S') M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u2} M A (SetLike.hasMem.{u2, u1} A M _inst_2) x S'))))))
 but is expected to have type
-  forall {M : Type.{u2}} {A : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : SetLike.{u1, u2} A M] [hA : MulMemClass.{u1, u2} A M _inst_1 _inst_2] (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_2) 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_2) x S')) => M) a) (FunLike.coe.{succ u2, succ u2, succ u2} (MulHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) M (MulMemClass.mul.{u2, u1} M A _inst_1 _inst_2 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) 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_2) x S')) => M) _x) (MulHomClass.toFunLike.{u2, u2, u2} (MulHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) M (MulMemClass.mul.{u2, u1} M A _inst_1 _inst_2 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) M (MulMemClass.mul.{u2, u1} M A _inst_1 _inst_2 hA S') _inst_1 (MulHom.mulHomClass.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) M (MulMemClass.mul.{u2, u1} M A _inst_1 _inst_2 hA S') _inst_1)) (MulMemClass.subtype.{u2, u1} M A _inst_1 _inst_2 hA S')) (Subtype.val.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S'))
+  forall {M : Type.{u2}} {A : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : SetLike.{u1, u2} A M] [hA : MulMemClass.{u1, u2} A M _inst_1 _inst_2] (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_2) 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_2) x S')) => M) a) (FunLike.coe.{succ u2, succ u2, succ u2} (MulHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) M (MulMemClass.mul.{u2, u1} M A _inst_1 _inst_2 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) 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_2) x S')) => M) _x) (MulHomClass.toFunLike.{u2, u2, u2} (MulHom.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) M (MulMemClass.mul.{u2, u1} M A _inst_1 _inst_2 hA S') _inst_1) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) M (MulMemClass.mul.{u2, u1} M A _inst_1 _inst_2 hA S') _inst_1 (MulHom.mulHomClass.{u2, u2} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S')) M (MulMemClass.mul.{u2, u1} M A _inst_1 _inst_2 hA S') _inst_1)) (MulMemClass.subtype.{u2, u1} M A _inst_1 _inst_2 hA S')) (Subtype.val.{succ u2} M (fun (x : M) => Membership.mem.{u2, u1} M A (SetLike.instMembership.{u1, u2} A M _inst_2) x S'))
 Case conversion may be inaccurate. Consider using '#align mul_mem_class.coe_subtype MulMemClass.coe_subtypeₓ'. -/
 @[simp, to_additive]
 theorem coe_subtype : (MulMemClass.subtype S' : S' → M) = coe :=
@@ -964,7 +964,7 @@ noncomputable def equivMapOfInjective (f : M →ₙ* N) (hf : Function.Injective
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (S : Subsemigroup.{u1} M _inst_1) (f : MulHom.{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)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) (x : coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.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)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) N (HasLiftT.mk.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) N (CoeTCₓ.coe.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) N (coeBase.{succ u2, succ u2} (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) N (coeSubtype.{succ u2} N (fun (x : N) => Membership.Mem.{u2, u2} N (Subsemigroup.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) x (Subsemigroup.map.{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)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M _inst_1) _inst_1 (Subsemigroup.setLike.{u1} M _inst_1) (Subsemigroup.mulMemClass.{u1} M _inst_1) S) (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S))) (fun (_x : MulEquiv.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M _inst_1) _inst_1 (Subsemigroup.setLike.{u1} M _inst_1) (Subsemigroup.mulMemClass.{u1} M _inst_1) S) (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S))) => (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) -> (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S))) (MulEquiv.hasCoeToFun.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S)) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M _inst_1) _inst_1 (Subsemigroup.setLike.{u1} M _inst_1) (Subsemigroup.mulMemClass.{u1} M _inst_1) S) (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S))) (Subsemigroup.equivMapOfInjective.{u1, u2} M N _inst_1 _inst_2 S f hf) x)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f ((fun (a : Type.{u1}) (b : Type.{u1}) [self : HasLiftT.{succ u1, succ u1} a b] => self.0) (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) M (HasLiftT.mk.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) M (CoeTCₓ.coe.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) M (coeBase.{succ u1, succ u1} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) S) M (coeSubtype.{succ u1} M (fun (x : M) => Membership.Mem.{u1, u1} M (Subsemigroup.{u1} M _inst_1) (SetLike.hasMem.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) x S))))) x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (S : Subsemigroup.{u2} M _inst_1) (f : MulHom.{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} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) (x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{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} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)))))) (Subsemigroup.equivMapOfInjective.{u2, u1} M N _inst_1 _inst_2 S f hf) x)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f (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} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) S)) x))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (S : Subsemigroup.{u2} M _inst_1) (f : MulHom.{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} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) (x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{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} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x S)) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) S) (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S)))))) (Subsemigroup.equivMapOfInjective.{u2, u1} M N _inst_1 _inst_2 S f hf) x)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f (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} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) S)) x))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.coe_equiv_map_of_injective_apply Subsemigroup.coe_equivMapOfInjective_applyₓ'. -/
 @[simp, to_additive]
 theorem coe_equivMapOfInjective_apply (f : M →ₙ* N) (hf : Function.Injective f) (x : S) :
@@ -1185,7 +1185,7 @@ def srange (f : M →ₙ* N) : Subsemigroup N :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u2} (Set.{u2} N) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Subsemigroup.{u2} N _inst_2) (Set.{u2} N) (HasLiftT.mk.{succ u2, succ u2} (Subsemigroup.{u2} N _inst_2) (Set.{u2} N) (CoeTCₓ.coe.{succ u2, succ u2} (Subsemigroup.{u2} N _inst_2) (Set.{u2} N) (SetLike.Set.hasCoeT.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)))) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f)) (Set.range.{u2, succ u1} N M (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} (Set.{u1} N) (SetLike.coe.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f)) (Set.range.{u1, succ u2} N M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} (Set.{u1} N) (SetLike.coe.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f)) (Set.range.{u1, succ u2} N M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f))
 Case conversion may be inaccurate. Consider using '#align mul_hom.coe_srange MulHom.coe_srangeₓ'. -/
 @[simp, to_additive]
 theorem coe_srange (f : M →ₙ* N) : (f.srange : Set N) = Set.range f :=
@@ -1197,7 +1197,7 @@ theorem coe_srange (f : M →ₙ* N) : (f.srange : Set N) = Set.range f :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2} {y : N}, Iff (Membership.Mem.{u2, u2} N (Subsemigroup.{u2} N _inst_2) (SetLike.hasMem.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) y (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f)) (Exists.{succ u1} M (fun (x : M) => Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) y))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2} {y : N}, Iff (Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) y (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f)) (Exists.{succ u2} M (fun (x : M) => Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) y))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2} {y : N}, Iff (Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) y (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f)) (Exists.{succ u2} M (fun (x : M) => Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) y))
 Case conversion may be inaccurate. Consider using '#align mul_hom.mem_srange MulHom.mem_srangeₓ'. -/
 @[simp, to_additive]
 theorem mem_srange {f : M →ₙ* N} {y : N} : y ∈ f.srange ↔ ∃ x, f x = y :=
@@ -1252,7 +1252,7 @@ theorem srange_top_of_surjective {N} [Mul N] (f : M →ₙ* N) (hf : Function.Su
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (s : Set.{u2} N), LE.le.{u1} (Subsemigroup.{u1} M _inst_1) (Preorder.toLE.{u1} (Subsemigroup.{u1} M _inst_1) (PartialOrder.toPreorder.{u1} (Subsemigroup.{u1} M _inst_1) (SetLike.partialOrder.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)))) (Subsemigroup.closure.{u1} M _inst_1 (Set.preimage.{u1, u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) s)) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (Subsemigroup.closure.{u2} N _inst_2 s))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (s : Set.{u1} N), LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1))))) (Subsemigroup.closure.{u2} M _inst_1 (Set.preimage.{u2, u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) s)) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Subsemigroup.closure.{u1} N _inst_2 s))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (s : Set.{u1} N), LE.le.{u2} (Subsemigroup.{u2} M _inst_1) (Preorder.toLE.{u2} (Subsemigroup.{u2} M _inst_1) (PartialOrder.toPreorder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteSemilatticeInf.toPartialOrder.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toCompleteSemilatticeInf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1))))) (Subsemigroup.closure.{u2} M _inst_1 (Set.preimage.{u2, u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) s)) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Subsemigroup.closure.{u1} N _inst_2 s))
 Case conversion may be inaccurate. Consider using '#align mul_hom.mclosure_preimage_le MulHom.mclosure_preimage_leₓ'. -/
 @[to_additive]
 theorem mclosure_preimage_le (f : M →ₙ* N) (s : Set N) : closure (f ⁻¹' s) ≤ (closure s).comap f :=
@@ -1264,7 +1264,7 @@ theorem mclosure_preimage_le (f : M →ₙ* N) (s : Set N) : closure (f ⁻¹' s
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (s : Set.{u1} M), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Subsemigroup.closure.{u1} M _inst_1 s)) (Subsemigroup.closure.{u2} N _inst_2 (Set.image.{u1, u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) s))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (s : Set.{u2} M), Eq.{succ u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f (Subsemigroup.closure.{u2} M _inst_1 s)) (Subsemigroup.closure.{u1} N _inst_2 (Set.image.{u2, u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) s))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (s : Set.{u2} M), Eq.{succ u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f (Subsemigroup.closure.{u2} M _inst_1 s)) (Subsemigroup.closure.{u1} N _inst_2 (Set.image.{u2, u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) s))
 Case conversion may be inaccurate. Consider using '#align mul_hom.map_mclosure MulHom.map_mclosureₓ'. -/
 /-- The image under a semigroup hom of the subsemigroup generated by a set equals the subsemigroup
 generated by the image of the set. -/
@@ -1329,7 +1329,7 @@ theorem coe_srangeRestrict {N} [Mul N] (f : M →ₙ* N) (x : M) : (f.srangeRest
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2), Function.Surjective.{succ u1, succ u2} M (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f)) _inst_1 (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f))) (fun (_x : MulHom.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f)) _inst_1 (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f))) => M -> (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f))) (MulHom.hasCoeToFun.{u1, u2} M (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f)) _inst_1 (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (MulHom.srange.{u1, u2} M N _inst_1 _inst_2 f))) (MulHom.srangeRestrict.{u1, u2} M _inst_1 N _inst_2 f))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2), Function.Surjective.{succ u2, succ u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _inst_1 (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{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 (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _inst_1 (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _inst_1 (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f)) (MulHom.mulHomClass.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _inst_1 (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f)))) (MulHom.srangeRestrict.{u2, u1} M _inst_1 N _inst_2 f))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2), Function.Surjective.{succ u2, succ u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _inst_1 (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{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 (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _inst_1 (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _inst_1 (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f)) (MulHom.mulHomClass.{u2, u1} M (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f))) _inst_1 (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (MulHom.srange.{u2, u1} M N _inst_1 _inst_2 f)))) (MulHom.srangeRestrict.{u2, u1} M _inst_1 N _inst_2 f))
 Case conversion may be inaccurate. Consider using '#align mul_hom.srange_restrict_surjective MulHom.srangeRestrict_surjectiveₓ'. -/
 @[to_additive]
 theorem srangeRestrict_surjective (f : M →ₙ* N) : Function.Surjective f.srangeRestrict :=
@@ -1380,7 +1380,7 @@ def subsemigroupMap (f : M →ₙ* N) (M' : Subsemigroup M) : M' →ₙ* M'.map
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (M' : Subsemigroup.{u1} M _inst_1), Function.Surjective.{succ u1, succ u2} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) M') (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f M')) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) M') (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f M')) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M _inst_1) _inst_1 (Subsemigroup.setLike.{u1} M _inst_1) (Subsemigroup.mulMemClass.{u1} M _inst_1) M') (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f M'))) (fun (_x : MulHom.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) M') (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f M')) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M _inst_1) _inst_1 (Subsemigroup.setLike.{u1} M _inst_1) (Subsemigroup.mulMemClass.{u1} M _inst_1) M') (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f M'))) => (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) M') -> (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f M'))) (MulHom.hasCoeToFun.{u1, u2} (coeSort.{succ u1, succ (succ u1)} (Subsemigroup.{u1} M _inst_1) Type.{u1} (SetLike.hasCoeToSort.{u1, u1} (Subsemigroup.{u1} M _inst_1) M (Subsemigroup.setLike.{u1} M _inst_1)) M') (coeSort.{succ u2, succ (succ u2)} (Subsemigroup.{u2} N _inst_2) Type.{u2} (SetLike.hasCoeToSort.{u2, u2} (Subsemigroup.{u2} N _inst_2) N (Subsemigroup.setLike.{u2} N _inst_2)) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f M')) (MulMemClass.mul.{u1, u1} M (Subsemigroup.{u1} M _inst_1) _inst_1 (Subsemigroup.setLike.{u1} M _inst_1) (Subsemigroup.mulMemClass.{u1} M _inst_1) M') (MulMemClass.mul.{u2, u2} N (Subsemigroup.{u2} N _inst_2) _inst_2 (Subsemigroup.setLike.{u2} N _inst_2) (Subsemigroup.mulMemClass.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f M'))) (MulHom.subsemigroupMap.{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 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (M' : Subsemigroup.{u2} M _inst_1), Function.Surjective.{succ u2, succ u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) M') (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) M') (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) M') (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M')) (MulHom.mulHomClass.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) M') (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M')))) (MulHom.subsemigroupMap.{u2, u1} M N _inst_1 _inst_2 f M'))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (M' : Subsemigroup.{u2} M _inst_1), Function.Surjective.{succ u2, succ u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) M') (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (fun (_x : Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{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 (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) => Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) M') (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) M') (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M')) (MulHom.mulHomClass.{u2, u1} (Subtype.{succ u2} M (fun (x : M) => Membership.mem.{u2, u2} M (Subsemigroup.{u2} M _inst_1) (SetLike.instMembership.{u2, u2} (Subsemigroup.{u2} M _inst_1) M (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1)) x M')) (Subtype.{succ u1} N (fun (x : N) => Membership.mem.{u1, u1} N (Subsemigroup.{u1} N _inst_2) (SetLike.instMembership.{u1, u1} (Subsemigroup.{u1} N _inst_2) N (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2)) x (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M'))) (MulMemClass.mul.{u2, u2} M (Subsemigroup.{u2} M _inst_1) _inst_1 (Subsemigroup.instSetLikeSubsemigroup.{u2} M _inst_1) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u2} M _inst_1) M') (MulMemClass.mul.{u1, u1} N (Subsemigroup.{u1} N _inst_2) _inst_2 (Subsemigroup.instSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.instMulMemClassSubsemigroupInstSetLikeSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f M')))) (MulHom.subsemigroupMap.{u2, u1} M N _inst_1 _inst_2 f M'))
 Case conversion may be inaccurate. Consider using '#align mul_hom.subsemigroup_map_surjective MulHom.subsemigroupMap_surjectiveₓ'. -/
 @[to_additive]
 theorem subsemigroupMap_surjective (f : M →ₙ* N) (M' : Subsemigroup M) :
Diff
@@ -478,9 +478,9 @@ theorem comap_map_comap {S : Subsemigroup N} {f : M →ₙ* N} :
 
 /- warning: subsemigroup.map_sup -> Subsemigroup.map_sup is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (S : Subsemigroup.{u1} M _inst_1) (T : Subsemigroup.{u1} M _inst_1) (f : MulHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (HasSup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1)))) S T)) (HasSup.sup.{u2} (Subsemigroup.{u2} N _inst_2) (SemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.completeLattice.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f T))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (S : Subsemigroup.{u1} M _inst_1) (T : Subsemigroup.{u1} M _inst_1) (f : MulHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Sup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1)))) S T)) (Sup.sup.{u2} (Subsemigroup.{u2} N _inst_2) (SemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.completeLattice.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f T))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (S : Subsemigroup.{u2} M _inst_1) (T : Subsemigroup.{u2} M _inst_1) (f : MulHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f (HasSup.sup.{u2} (Subsemigroup.{u2} M _inst_1) (SemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} M _inst_1) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)))) S T)) (HasSup.sup.{u1} (Subsemigroup.{u1} N _inst_2) (SemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} N _inst_2) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2)))) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f T))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (S : Subsemigroup.{u2} M _inst_1) (T : Subsemigroup.{u2} M _inst_1) (f : MulHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f (Sup.sup.{u2} (Subsemigroup.{u2} M _inst_1) (SemilatticeSup.toSup.{u2} (Subsemigroup.{u2} M _inst_1) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)))) S T)) (Sup.sup.{u1} (Subsemigroup.{u1} N _inst_2) (SemilatticeSup.toSup.{u1} (Subsemigroup.{u1} N _inst_2) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2)))) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f T))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.map_sup Subsemigroup.map_supₓ'. -/
 @[to_additive]
 theorem map_sup (S T : Subsemigroup M) (f : M →ₙ* N) : (S ⊔ T).map f = S.map f ⊔ T.map f :=
@@ -503,9 +503,9 @@ theorem map_supᵢ {ι : Sort _} (f : M →ₙ* N) (s : ι → Subsemigroup M) :
 
 /- warning: subsemigroup.comap_inf -> Subsemigroup.comap_inf is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2) (f : MulHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (HasInf.inf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasInf.{u2} N _inst_2) S T)) (HasInf.inf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasInf.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2) (f : MulHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (Inf.inf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasInf.{u2} N _inst_2) S T)) (Inf.inf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasInf.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2) (f : MulHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (HasInf.inf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instHasInfSubsemigroup.{u2} N _inst_2) S T)) (HasInf.inf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instHasInfSubsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2) (f : MulHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (Inf.inf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instInfSubsemigroup.{u2} N _inst_2) S T)) (Inf.inf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instInfSubsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_inf Subsemigroup.comap_infₓ'. -/
 @[to_additive]
 theorem comap_inf (S T : Subsemigroup N) (f : M →ₙ* N) : (S ⊓ T).comap f = S.comap f ⊓ T.comap f :=
@@ -611,9 +611,9 @@ theorem map_injective_of_injective : Function.Injective (map f) :=
 
 /- warning: subsemigroup.comap_inf_map_of_injective -> Subsemigroup.comap_inf_map_of_injective is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : Subsemigroup.{u1} M _inst_1) (T : Subsemigroup.{u1} M _inst_1), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (HasInf.inf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasInf.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f T))) (HasInf.inf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasInf.{u1} M _inst_1) S T))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : Subsemigroup.{u1} M _inst_1) (T : Subsemigroup.{u1} M _inst_1), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (Inf.inf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasInf.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f T))) (Inf.inf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasInf.{u1} M _inst_1) S T))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} M _inst_1) (T : Subsemigroup.{u2} M _inst_1), Eq.{succ u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (HasInf.inf.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instHasInfSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f T))) (HasInf.inf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instHasInfSubsemigroup.{u2} M _inst_1) S T))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} M _inst_1) (T : Subsemigroup.{u2} M _inst_1), Eq.{succ u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Inf.inf.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instInfSubsemigroup.{u1} N _inst_2) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f T))) (Inf.inf.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instInfSubsemigroup.{u2} M _inst_1) S T))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_inf_map_of_injective Subsemigroup.comap_inf_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_inf_map_of_injective (S T : Subsemigroup M) : (S.map f ⊓ T.map f).comap f = S ⊓ T :=
@@ -636,9 +636,9 @@ theorem comap_infᵢ_map_of_injective (S : ι → Subsemigroup M) :
 
 /- warning: subsemigroup.comap_sup_map_of_injective -> Subsemigroup.comap_sup_map_of_injective is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : Subsemigroup.{u1} M _inst_1) (T : Subsemigroup.{u1} M _inst_1), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (HasSup.sup.{u2} (Subsemigroup.{u2} N _inst_2) (SemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.completeLattice.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f T))) (HasSup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1)))) S T))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : Subsemigroup.{u1} M _inst_1) (T : Subsemigroup.{u1} M _inst_1), Eq.{succ u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f (Sup.sup.{u2} (Subsemigroup.{u2} N _inst_2) (SemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.completeLattice.{u2} N _inst_2)))) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f T))) (Sup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1)))) S T))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} M _inst_1) (T : Subsemigroup.{u2} M _inst_1), Eq.{succ u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (HasSup.sup.{u1} (Subsemigroup.{u1} N _inst_2) (SemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} N _inst_2) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2)))) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f T))) (HasSup.sup.{u2} (Subsemigroup.{u2} M _inst_1) (SemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} M _inst_1) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)))) S T))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} M _inst_1) (T : Subsemigroup.{u2} M _inst_1), Eq.{succ u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.comap.{u2, u1} M N _inst_1 _inst_2 f (Sup.sup.{u1} (Subsemigroup.{u1} N _inst_2) (SemilatticeSup.toSup.{u1} (Subsemigroup.{u1} N _inst_2) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} N _inst_2) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} N _inst_2)))) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f S) (Subsemigroup.map.{u2, u1} M N _inst_1 _inst_2 f T))) (Sup.sup.{u2} (Subsemigroup.{u2} M _inst_1) (SemilatticeSup.toSup.{u2} (Subsemigroup.{u2} M _inst_1) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} M _inst_1) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} M _inst_1)))) S T))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.comap_sup_map_of_injective Subsemigroup.comap_sup_map_of_injectiveₓ'. -/
 @[to_additive]
 theorem comap_sup_map_of_injective (S T : Subsemigroup M) : (S.map f ⊔ T.map f).comap f = S ⊔ T :=
@@ -736,9 +736,9 @@ theorem comap_injective_of_surjective : Function.Injective (comap f) :=
 
 /- warning: subsemigroup.map_inf_comap_of_surjective -> Subsemigroup.map_inf_comap_of_surjective is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (HasInf.inf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasInf.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))) (HasInf.inf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasInf.{u2} N _inst_2) S T))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Inf.inf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.hasInf.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))) (Inf.inf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.hasInf.{u2} N _inst_2) S T))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (HasInf.inf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instHasInfSubsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))) (HasInf.inf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instHasInfSubsemigroup.{u2} N _inst_2) S T))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Inf.inf.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instInfSubsemigroup.{u1} M _inst_1) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))) (Inf.inf.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instInfSubsemigroup.{u2} N _inst_2) S T))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.map_inf_comap_of_surjective Subsemigroup.map_inf_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_inf_comap_of_surjective (S T : Subsemigroup N) :
@@ -762,9 +762,9 @@ theorem map_infᵢ_comap_of_surjective (S : ι → Subsemigroup N) :
 
 /- warning: subsemigroup.map_sup_comap_of_surjective -> Subsemigroup.map_sup_comap_of_surjective is a dubious translation:
 lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (HasSup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1)))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))) (HasSup.sup.{u2} (Subsemigroup.{u2} N _inst_2) (SemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.completeLattice.{u2} N _inst_2)))) S T))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (forall (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Sup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.completeLattice.{u1} M _inst_1)))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))) (Sup.sup.{u2} (Subsemigroup.{u2} N _inst_2) (SemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.completeLattice.{u2} N _inst_2)))) S T))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (HasSup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toHasSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))) (HasSup.sup.{u2} (Subsemigroup.{u2} N _inst_2) (SemilatticeSup.toHasSup.{u2} (Subsemigroup.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)))) S T))
+  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MulHom.{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} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2)) f)) -> (forall (S : Subsemigroup.{u2} N _inst_2) (T : Subsemigroup.{u2} N _inst_2), Eq.{succ u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.map.{u1, u2} M N _inst_1 _inst_2 f (Sup.sup.{u1} (Subsemigroup.{u1} M _inst_1) (SemilatticeSup.toSup.{u1} (Subsemigroup.{u1} M _inst_1) (Lattice.toSemilatticeSup.{u1} (Subsemigroup.{u1} M _inst_1) (CompleteLattice.toLattice.{u1} (Subsemigroup.{u1} M _inst_1) (Subsemigroup.instCompleteLatticeSubsemigroup.{u1} M _inst_1)))) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f S) (Subsemigroup.comap.{u1, u2} M N _inst_1 _inst_2 f T))) (Sup.sup.{u2} (Subsemigroup.{u2} N _inst_2) (SemilatticeSup.toSup.{u2} (Subsemigroup.{u2} N _inst_2) (Lattice.toSemilatticeSup.{u2} (Subsemigroup.{u2} N _inst_2) (CompleteLattice.toLattice.{u2} (Subsemigroup.{u2} N _inst_2) (Subsemigroup.instCompleteLatticeSubsemigroup.{u2} N _inst_2)))) S T))
 Case conversion may be inaccurate. Consider using '#align subsemigroup.map_sup_comap_of_surjective Subsemigroup.map_sup_comap_of_surjectiveₓ'. -/
 @[to_additive]
 theorem map_sup_comap_of_surjective (S T : Subsemigroup N) :

Changes in mathlib4

mathlib3
mathlib4
chore: remove unnecessary cdots (#12417)

These · are scoping when there is a single active goal.

These were found using a modification of the linter at #12339.

Diff
@@ -625,7 +625,7 @@ theorem closure_closure_coe_preimage {s : Set M} :
   eq_top_iff.2 fun x =>
     Subtype.recOn x fun x hx _ => by
       refine' closure_induction' _ (fun g hg => subset_closure hg) (fun g₁ g₂ hg₁ hg₂ => _) hx
-      · exact Subsemigroup.mul_mem _
+      exact Subsemigroup.mul_mem _
 #align subsemigroup.closure_closure_coe_preimage Subsemigroup.closure_closure_coe_preimage
 #align add_subsemigroup.closure_closure_coe_preimage AddSubsemigroup.closure_closure_coe_preimage
 
chore: remove include/omit porting notes (#10517)

See this Zulip discussion.

Diff
@@ -374,8 +374,6 @@ section GaloisCoinsertion
 
 variable {ι : Type*} {f : M →ₙ* N} (hf : Function.Injective f)
 
---include hf
-
 /-- `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. "]
 def gciMapComap : GaloisCoinsertion (map f) (comap f) :=
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
@@ -873,7 +873,7 @@ theorem prod_map_comap_prod' {M' : Type*} {N' : Type*} [Mul M'] [Mul N'] (f : M
 def subsemigroupComap (f : M →ₙ* N) (N' : Subsemigroup N) :
     N'.comap f →ₙ* N' where
   toFun x := ⟨f x, x.prop⟩
-  map_mul' x y := Subtype.eq (@map_mul M N _ _ _ _ f x y)
+  map_mul' x y := Subtype.eq <| map_mul (M := M) (N := N) f x y
 #align mul_hom.subsemigroup_comap MulHom.subsemigroupComap
 #align add_hom.subsemigroup_comap AddHom.subsemigroupComap
 #align mul_hom.subsemigroup_comap_apply_coe MulHom.subsemigroupComap_apply_coe
@@ -887,7 +887,7 @@ See `MulEquiv.subsemigroupMap` for a variant for `MulEquiv`s. -/
 def subsemigroupMap (f : M →ₙ* N) (M' : Subsemigroup M) :
     M' →ₙ* M'.map f where
   toFun x := ⟨f x, ⟨x, x.prop, rfl⟩⟩
-  map_mul' x y := Subtype.eq <| @map_mul M N _ _ _ _ f x y
+  map_mul' x y := Subtype.eq <| map_mul (M := M) (N := N) f x y
 #align mul_hom.subsemigroup_map MulHom.subsemigroupMap
 #align add_hom.subsemigroup_map AddHom.subsemigroupMap
 #align mul_hom.subsemigroup_map_apply_coe MulHom.subsemigroupMap_apply_coe
fix(Subsemigroup/Operations): fix types (#9716)

Fix theorem statements of AddSubsemigroup.toSubsemigroup'_closure and Subsemigroup.toAddSubsemigroup'_closure.

Diff
@@ -109,7 +109,7 @@ theorem Subsemigroup.toAddSubsemigroup_closure (S : Set M) :
 
 theorem AddSubsemigroup.toSubsemigroup'_closure (S : Set (Additive M)) :
     AddSubsemigroup.toSubsemigroup' (AddSubsemigroup.closure S) =
-      Subsemigroup.closure (Multiplicative.ofAdd ⁻¹' S) :=
+      Subsemigroup.closure (Additive.ofMul ⁻¹' S) :=
   le_antisymm
     (AddSubsemigroup.toSubsemigroup'.le_symm_apply.1 <|
       AddSubsemigroup.closure_le.2 (Subsemigroup.subset_closure (M := M)))
@@ -156,7 +156,7 @@ theorem AddSubsemigroup.toSubsemigroup_closure (S : Set A) :
 
 theorem Subsemigroup.toAddSubsemigroup'_closure (S : Set (Multiplicative A)) :
     Subsemigroup.toAddSubsemigroup' (Subsemigroup.closure S) =
-    AddSubsemigroup.closure (Additive.ofMul ⁻¹' S) :=
+      AddSubsemigroup.closure (Multiplicative.ofAdd ⁻¹' S) :=
   le_antisymm
     (Subsemigroup.toAddSubsemigroup'.to_galoisConnection.l_le <|
       Subsemigroup.closure_le.2 <| AddSubsemigroup.subset_closure (M := A))
chore(*): replace $ with <| (#9319)

See Zulip thread for the discussion.

Diff
@@ -113,7 +113,7 @@ theorem AddSubsemigroup.toSubsemigroup'_closure (S : Set (Additive M)) :
   le_antisymm
     (AddSubsemigroup.toSubsemigroup'.le_symm_apply.1 <|
       AddSubsemigroup.closure_le.2 (Subsemigroup.subset_closure (M := M)))
-    (Subsemigroup.closure_le.2 $ AddSubsemigroup.subset_closure (M := Additive M))
+    (Subsemigroup.closure_le.2 <| AddSubsemigroup.subset_closure (M := Additive M))
 #align add_subsemigroup.to_subsemigroup'_closure AddSubsemigroup.toSubsemigroup'_closure
 
 end
@@ -150,8 +150,8 @@ theorem AddSubsemigroup.toSubsemigroup_closure (S : Set A) :
       Subsemigroup.closure (Multiplicative.toAdd ⁻¹' S) :=
   le_antisymm
     (AddSubsemigroup.toSubsemigroup.to_galoisConnection.l_le <|
-      AddSubsemigroup.closure_le.2 $ Subsemigroup.subset_closure (M := Multiplicative A))
-    (Subsemigroup.closure_le.2 $ AddSubsemigroup.subset_closure (M := A))
+      AddSubsemigroup.closure_le.2 <| Subsemigroup.subset_closure (M := Multiplicative A))
+    (Subsemigroup.closure_le.2 <| AddSubsemigroup.subset_closure (M := A))
 #align add_subsemigroup.to_subsemigroup_closure AddSubsemigroup.toSubsemigroup_closure
 
 theorem Subsemigroup.toAddSubsemigroup'_closure (S : Set (Multiplicative A)) :
@@ -159,8 +159,8 @@ theorem Subsemigroup.toAddSubsemigroup'_closure (S : Set (Multiplicative A)) :
     AddSubsemigroup.closure (Additive.ofMul ⁻¹' S) :=
   le_antisymm
     (Subsemigroup.toAddSubsemigroup'.to_galoisConnection.l_le <|
-      Subsemigroup.closure_le.2 $ AddSubsemigroup.subset_closure (M := A))
-    (AddSubsemigroup.closure_le.2 $ Subsemigroup.subset_closure (M := Multiplicative A))
+      Subsemigroup.closure_le.2 <| AddSubsemigroup.subset_closure (M := A))
+    (AddSubsemigroup.closure_le.2 <| Subsemigroup.subset_closure (M := Multiplicative A))
 #align subsemigroup.to_add_subsemigroup'_closure Subsemigroup.toAddSubsemigroup'_closure
 
 end
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
@@ -568,8 +568,8 @@ instance toCommSemigroup {M} [CommSemigroup M] {A : Type*} [SetLike A M] [MulMem
 /-- The natural semigroup hom from a subsemigroup of semigroup `M` to `M`. -/
 @[to_additive "The natural semigroup hom from an `AddSubsemigroup` of
 `AddSubsemigroup` `M` to `M`."]
-def subtype : S' →ₙ* M :=
-  ⟨Subtype.val, fun _ _ => rfl⟩
+def subtype : S' →ₙ* M where
+  toFun := Subtype.val; map_mul' := fun _ _ => rfl
 #align mul_mem_class.subtype MulMemClass.subtype
 #align add_mem_class.subtype AddMemClass.subtype
 
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
@@ -254,7 +254,10 @@ theorem map_map (g : N →ₙ* P) (f : M →ₙ* N) : (S.map f).map g = S.map (g
 #align subsemigroup.map_map Subsemigroup.map_map
 #align add_subsemigroup.map_map AddSubsemigroup.map_map
 
-@[to_additive]
+-- The simpNF linter says that the LHS can be simplified via `Subsemigroup.mem_map`.
+-- However this is a higher priority lemma.
+-- https://github.com/leanprover/std4/issues/207
+@[to_additive (attr := simp, nolint simpNF)]
 theorem mem_map_iff_mem {f : M →ₙ* N} (hf : Function.Injective f) {S : Subsemigroup 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 @@ subsemigroup, range, product, map, comap
 -/
 
 
-variable {M N P σ : Type _}
+variable {M N P σ : Type*}
 
 /-!
 ### Conversion to/from `Additive`/`Multiplicative`
@@ -120,7 +120,7 @@ end
 
 section
 
-variable {A : Type _} [Add A]
+variable {A : Type*} [Add A]
 
 /-- Additive subsemigroups of an additive semigroup `A` are isomorphic to
 multiplicative subsemigroups of `Multiplicative A`. -/
@@ -330,7 +330,7 @@ theorem map_sup (S T : Subsemigroup M) (f : M →ₙ* N) : (S ⊔ T).map f = S.m
 #align add_subsemigroup.map_sup AddSubsemigroup.map_sup
 
 @[to_additive]
-theorem map_iSup {ι : Sort _} (f : M →ₙ* N) (s : ι → Subsemigroup M) :
+theorem map_iSup {ι : Sort*} (f : M →ₙ* N) (s : ι → Subsemigroup M) :
     (iSup s).map f = ⨆ i, (s i).map f :=
   (gc_map_comap f).l_iSup
 #align subsemigroup.map_supr Subsemigroup.map_iSup
@@ -343,7 +343,7 @@ theorem comap_inf (S T : Subsemigroup N) (f : M →ₙ* N) : (S ⊓ T).comap f =
 #align add_subsemigroup.comap_inf AddSubsemigroup.comap_inf
 
 @[to_additive]
-theorem comap_iInf {ι : Sort _} (f : M →ₙ* N) (s : ι → Subsemigroup N) :
+theorem comap_iInf {ι : Sort*} (f : M →ₙ* N) (s : ι → Subsemigroup N) :
     (iInf s).comap f = ⨅ i, (s i).comap f :=
   (gc_map_comap f).u_iInf
 #align subsemigroup.comap_infi Subsemigroup.comap_iInf
@@ -369,7 +369,7 @@ theorem map_id (S : Subsemigroup M) : S.map (MulHom.id M) = S :=
 
 section GaloisCoinsertion
 
-variable {ι : Type _} {f : M →ₙ* N} (hf : Function.Injective f)
+variable {ι : Type*} {f : M →ₙ* N} (hf : Function.Injective f)
 
 --include hf
 
@@ -440,7 +440,7 @@ end GaloisCoinsertion
 
 section GaloisInsertion
 
-variable {ι : Type _} {f : M →ₙ* N} (hf : Function.Surjective f)
+variable {ι : Type*} {f : M →ₙ* N} (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. "]
@@ -515,7 +515,7 @@ end Subsemigroup
 
 namespace MulMemClass
 
-variable {A : Type _} [Mul M] [SetLike A M] [hA : MulMemClass A M] (S' : A)
+variable {A : Type*} [Mul M] [SetLike A M] [hA : MulMemClass A M] (S' : A)
 
 -- lower priority so other instances are found first
 /-- A submagma of a magma inherits a multiplication. -/
@@ -548,7 +548,7 @@ theorem mul_def (x y : S') : x * y = ⟨x * y, mul_mem x.2 y.2⟩ :=
 
 /-- A subsemigroup of a semigroup inherits a semigroup structure. -/
 @[to_additive "An `AddSubsemigroup` of an `AddSemigroup` inherits an `AddSemigroup` structure."]
-instance toSemigroup {M : Type _} [Semigroup M] {A : Type _} [SetLike A M] [MulMemClass A M]
+instance toSemigroup {M : Type*} [Semigroup M] {A : Type*} [SetLike A M] [MulMemClass A M]
     (S : A) : Semigroup S :=
   Subtype.coe_injective.semigroup Subtype.val fun _ _ => rfl
 #align mul_mem_class.to_semigroup MulMemClass.toSemigroup
@@ -556,7 +556,7 @@ instance toSemigroup {M : Type _} [Semigroup M] {A : Type _} [SetLike A M] [MulM
 
 /-- A subsemigroup of a `CommSemigroup` is a `CommSemigroup`. -/
 @[to_additive "An `AddSubsemigroup` of an `AddCommSemigroup` is an `AddCommSemigroup`."]
-instance toCommSemigroup {M} [CommSemigroup M] {A : Type _} [SetLike A M] [MulMemClass A M]
+instance toCommSemigroup {M} [CommSemigroup M] {A : Type*} [SetLike A M] [MulMemClass A M]
     (S : A) : CommSemigroup S :=
   Subtype.coe_injective.commSemigroup Subtype.val fun _ _ => rfl
 #align mul_mem_class.to_comm_semigroup MulMemClass.toCommSemigroup
@@ -813,13 +813,13 @@ theorem map_mclosure (f : M →ₙ* N) (s : Set M) : (closure s).map f = closure
 
 /-- Restriction of a semigroup hom to a subsemigroup of the domain. -/
 @[to_additive "Restriction of an AddSemigroup hom to an `AddSubsemigroup` of the domain."]
-def restrict {N : Type _} [Mul N] [SetLike σ M] [MulMemClass σ M] (f : M →ₙ* N) (S : σ) : S →ₙ* N :=
+def restrict {N : Type*} [Mul N] [SetLike σ M] [MulMemClass σ M] (f : M →ₙ* N) (S : σ) : S →ₙ* N :=
   f.comp (MulMemClass.subtype S)
 #align mul_hom.restrict MulHom.restrict
 #align add_hom.restrict AddHom.restrict
 
 @[to_additive (attr := simp)]
-theorem restrict_apply {N : Type _} [Mul N] [SetLike σ M] [MulMemClass σ M] (f : M →ₙ* N) {S : σ}
+theorem restrict_apply {N : Type*} [Mul N] [SetLike σ M] [MulMemClass σ M] (f : M →ₙ* N) {S : σ}
     (x : S) : f.restrict S x = f x :=
   rfl
 #align mul_hom.restrict_apply MulHom.restrict_apply
@@ -857,7 +857,7 @@ theorem srangeRestrict_surjective (f : M →ₙ* N) : Function.Surjective f.sran
 #align add_hom.srange_restrict_surjective AddHom.srangeRestrict_surjective
 
 @[to_additive prod_map_comap_prod']
-theorem prod_map_comap_prod' {M' : Type _} {N' : Type _} [Mul M'] [Mul N'] (f : M →ₙ* N)
+theorem prod_map_comap_prod' {M' : Type*} {N' : Type*} [Mul M'] [Mul N'] (f : M →ₙ* N)
     (g : M' →ₙ* N') (S : Subsemigroup N) (S' : Subsemigroup 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 _ _
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,16 +3,13 @@ Copyright (c) 2022 Yakov Pechersky. 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, Yakov Pechersky, Jireh Loreaux
-
-! This file was ported from Lean 3 source module group_theory.subsemigroup.operations
-! leanprover-community/mathlib commit 207cfac9fcd06138865b5d04f7091e46d9320432
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.GroupTheory.Subsemigroup.Basic
 import Mathlib.Algebra.Group.Prod
 import Mathlib.Algebra.Group.TypeTags
 
+#align_import group_theory.subsemigroup.operations from "leanprover-community/mathlib"@"207cfac9fcd06138865b5d04f7091e46d9320432"
+
 /-!
 # Operations on `Subsemigroup`s
 
feat: add MulEquiv.toMulHom_eq_coe to normalize coercions (#5546)

There will probably be simpNF problems, waiting for CI.

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

Diff
@@ -602,7 +602,7 @@ def topEquiv : (⊤ : Subsemigroup M) ≃* M where
 
 @[to_additive (attr := simp)]
 theorem topEquiv_toMulHom :
-    (topEquiv : _ ≃* M).toMulHom = MulMemClass.subtype (⊤ : Subsemigroup M) :=
+    ((topEquiv : _ ≃* M) : _ →ₙ* M) = MulMemClass.subtype (⊤ : Subsemigroup M) :=
   rfl
 #align subsemigroup.top_equiv_to_mul_hom Subsemigroup.topEquiv_toMulHom
 #align add_subsemigroup.top_equiv_to_add_hom AddSubsemigroup.topEquiv_toAddHom
@@ -700,27 +700,27 @@ open MulHom
 
 @[to_additive]
 theorem mem_map_equiv {f : M ≃* N} {K : Subsemigroup M} {x : N} :
-    x ∈ K.map f.toMulHom ↔ f.symm x ∈ K :=
+    x ∈ K.map (f : M →ₙ* N) ↔ f.symm x ∈ K :=
   @Set.mem_image_equiv _ _ (K : Set M) f.toEquiv x
 #align subsemigroup.mem_map_equiv Subsemigroup.mem_map_equiv
 #align add_subsemigroup.mem_map_equiv AddSubsemigroup.mem_map_equiv
 
 @[to_additive]
 theorem map_equiv_eq_comap_symm (f : M ≃* N) (K : Subsemigroup M) :
-    K.map f.toMulHom = K.comap f.symm.toMulHom :=
+    K.map (f : M →ₙ* N) = K.comap (f.symm : N →ₙ* M) :=
   SetLike.coe_injective (f.toEquiv.image_eq_preimage K)
 #align subsemigroup.map_equiv_eq_comap_symm Subsemigroup.map_equiv_eq_comap_symm
 #align add_subsemigroup.map_equiv_eq_comap_symm AddSubsemigroup.map_equiv_eq_comap_symm
 
 @[to_additive]
 theorem comap_equiv_eq_map_symm (f : N ≃* M) (K : Subsemigroup M) :
-    K.comap f.toMulHom = K.map f.symm.toMulHom :=
+    K.comap (f : N →ₙ* M) = K.map (f.symm : M →ₙ* N) :=
   (map_equiv_eq_comap_symm f.symm K).symm
 #align subsemigroup.comap_equiv_eq_map_symm Subsemigroup.comap_equiv_eq_map_symm
 #align add_subsemigroup.comap_equiv_eq_map_symm AddSubsemigroup.comap_equiv_eq_map_symm
 
 @[to_additive (attr := simp)]
-theorem map_equiv_top (f : M ≃* N) : (⊤ : Subsemigroup M).map f.toMulHom = ⊤ :=
+theorem map_equiv_top (f : M ≃* N) : (⊤ : Subsemigroup M).map (f : M →ₙ* N) = ⊤ :=
   SetLike.coe_injective <| Set.image_univ.trans f.surjective.range_eq
 #align subsemigroup.map_equiv_top Subsemigroup.map_equiv_top
 #align add_subsemigroup.map_equiv_top AddSubsemigroup.map_equiv_top
@@ -996,10 +996,10 @@ See `MulHom.subsemigroupMap` for a variant for `MulHom`s. -/
       "An `AddEquiv` `φ` between two additive semigroups `M` and `N` induces an `AddEquiv`
       between a subsemigroup `S ≤ M` and the subsemigroup `φ(S) ≤ N`.
       See `AddHom.addSubsemigroupMap` for a variant for `AddHom`s."]
-def subsemigroupMap (e : M ≃* N) (S : Subsemigroup M) : S ≃* S.map e.toMulHom :=
+def subsemigroupMap (e : M ≃* N) (S : Subsemigroup M) : S ≃* S.map (e : M →ₙ* N) :=
   { -- we restate this for `simps` to avoid `⇑e.symm.toEquiv x`
-    e.toMulHom.subsemigroupMap S,
-    e.toEquiv.image S with
+    (e : M →ₙ* N).subsemigroupMap S,
+    (e : M ≃ N).image S with
     toFun := fun x => ⟨e x, _⟩
     invFun := fun x => ⟨e.symm x, _⟩ }
 #align mul_equiv.subsemigroup_map MulEquiv.subsemigroupMap
chore: tidy various files (#5355)
Diff
@@ -788,7 +788,7 @@ theorem srange_top_iff_surjective {N} [Mul N] {f : M →ₙ* N} :
 
 /-- The range of a surjective semigroup hom is the whole of the codomain. -/
 @[to_additive (attr := simp)
-  "The range of a surjective `add_semigroup` hom is the whole of the codomain."]
+  "The range of a surjective `AddSemigroup` hom is the whole of the codomain."]
 theorem srange_top_of_surjective {N} [Mul N] (f : M →ₙ* N) (hf : Function.Surjective f) :
     f.srange = (⊤ : Subsemigroup N) :=
   srange_top_iff_surjective.2 hf
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
@@ -787,7 +787,8 @@ theorem srange_top_iff_surjective {N} [Mul N] {f : M →ₙ* N} :
 #align add_hom.srange_top_iff_surjective AddHom.srange_top_iff_surjective
 
 /-- The range of a surjective semigroup hom is the whole of the codomain. -/
-@[to_additive "The range of a surjective `add_semigroup` hom is the whole of the codomain."]
+@[to_additive (attr := simp)
+  "The range of a surjective `add_semigroup` hom is the whole of the codomain."]
 theorem srange_top_of_surjective {N} [Mul N] (f : M →ₙ* N) (hf : Function.Surjective f) :
     f.srange = (⊤ : Subsemigroup N) :=
   srange_top_iff_surjective.2 hf
chore: formatting issues (#4947)

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

Diff
@@ -90,7 +90,7 @@ def Subsemigroup.toAddSubsemigroup : Subsemigroup M ≃o AddSubsemigroup (Additi
       mul_mem' := S.add_mem' }
   left_inv _ := rfl
   right_inv _ := rfl
-  map_rel_iff':= Iff.rfl
+  map_rel_iff' := Iff.rfl
 #align subsemigroup.to_add_subsemigroup Subsemigroup.toAddSubsemigroup
 #align subsemigroup.to_add_subsemigroup_symm_apply_coe Subsemigroup.toAddSubsemigroup_symm_apply_coe
 #align subsemigroup.to_add_subsemigroup_apply_coe Subsemigroup.toAddSubsemigroup_apply_coe
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
@@ -643,7 +643,8 @@ def prod (s : Subsemigroup M) (t : Subsemigroup N) : Subsemigroup (M × N) where
 #align add_subsemigroup.prod AddSubsemigroup.prod
 
 @[to_additive coe_prod]
-theorem coe_prod (s : Subsemigroup M) (t : Subsemigroup N) : (s.prod t : Set (M × N)) = s ×ˢ t :=
+theorem coe_prod (s : Subsemigroup M) (t : Subsemigroup N) :
+    (s.prod t : Set (M × N)) = (s : Set M) ×ˢ (t : Set N) :=
   rfl
 #align subsemigroup.coe_prod Subsemigroup.coe_prod
 #align add_subsemigroup.coe_prod AddSubsemigroup.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
@@ -50,7 +50,7 @@ In this file we define various operations on `Subsemigroup`s and `MulHom`s.
   `S` and `T`.
 * `Subsemigroup.prodEquiv`: semigroup isomorphism between `s.prod t` and `s × t`;
 
-### Operations on `mul_hom`s
+### Operations on `MulHom`s
 
 * `MulHom.srange`: range of a semigroup homomorphism as a subsemigroup of the codomain;
 * `MulHom.restrict`: restrict a semigroup homomorphism to a subsemigroup;
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
@@ -333,11 +333,11 @@ theorem map_sup (S T : Subsemigroup M) (f : M →ₙ* N) : (S ⊔ T).map f = S.m
 #align add_subsemigroup.map_sup AddSubsemigroup.map_sup
 
 @[to_additive]
-theorem map_supᵢ {ι : Sort _} (f : M →ₙ* N) (s : ι → Subsemigroup M) :
-    (supᵢ s).map f = ⨆ i, (s i).map f :=
-  (gc_map_comap f).l_supᵢ
-#align subsemigroup.map_supr Subsemigroup.map_supᵢ
-#align add_subsemigroup.map_supr AddSubsemigroup.map_supᵢ
+theorem map_iSup {ι : Sort _} (f : M →ₙ* N) (s : ι → Subsemigroup M) :
+    (iSup s).map f = ⨆ i, (s i).map f :=
+  (gc_map_comap f).l_iSup
+#align subsemigroup.map_supr Subsemigroup.map_iSup
+#align add_subsemigroup.map_supr AddSubsemigroup.map_iSup
 
 @[to_additive]
 theorem comap_inf (S T : Subsemigroup N) (f : M →ₙ* N) : (S ⊓ T).comap f = S.comap f ⊓ T.comap f :=
@@ -346,11 +346,11 @@ theorem comap_inf (S T : Subsemigroup N) (f : M →ₙ* N) : (S ⊓ T).comap f =
 #align add_subsemigroup.comap_inf AddSubsemigroup.comap_inf
 
 @[to_additive]
-theorem comap_infᵢ {ι : Sort _} (f : M →ₙ* N) (s : ι → Subsemigroup N) :
-    (infᵢ s).comap f = ⨅ i, (s i).comap f :=
-  (gc_map_comap f).u_infᵢ
-#align subsemigroup.comap_infi Subsemigroup.comap_infᵢ
-#align add_subsemigroup.comap_infi AddSubsemigroup.comap_infᵢ
+theorem comap_iInf {ι : Sort _} (f : M →ₙ* N) (s : ι → Subsemigroup N) :
+    (iInf s).comap f = ⨅ i, (s i).comap f :=
+  (gc_map_comap f).u_iInf
+#align subsemigroup.comap_infi Subsemigroup.comap_iInf
+#align add_subsemigroup.comap_infi AddSubsemigroup.comap_iInf
 
 @[to_additive (attr := simp)]
 theorem map_bot (f : M →ₙ* N) : (⊥ : Subsemigroup M).map f = ⊥ :=
@@ -408,11 +408,11 @@ theorem comap_inf_map_of_injective (S T : Subsemigroup M) : (S.map f ⊓ T.map f
 #align add_subsemigroup.comap_inf_map_of_injective AddSubsemigroup.comap_inf_map_of_injective
 
 @[to_additive]
-theorem comap_infᵢ_map_of_injective (S : ι → Subsemigroup M) :
-    (⨅ i, (S i).map f).comap f = infᵢ S :=
-  (gciMapComap hf).u_infᵢ_l _
-#align subsemigroup.comap_infi_map_of_injective Subsemigroup.comap_infᵢ_map_of_injective
-#align add_subsemigroup.comap_infi_map_of_injective AddSubsemigroup.comap_infᵢ_map_of_injective
+theorem comap_iInf_map_of_injective (S : ι → Subsemigroup M) :
+    (⨅ i, (S i).map f).comap f = iInf S :=
+  (gciMapComap hf).u_iInf_l _
+#align subsemigroup.comap_infi_map_of_injective Subsemigroup.comap_iInf_map_of_injective
+#align add_subsemigroup.comap_infi_map_of_injective AddSubsemigroup.comap_iInf_map_of_injective
 
 @[to_additive]
 theorem comap_sup_map_of_injective (S T : Subsemigroup M) : (S.map f ⊔ T.map f).comap f = S ⊔ T :=
@@ -421,11 +421,11 @@ theorem comap_sup_map_of_injective (S T : Subsemigroup M) : (S.map f ⊔ T.map f
 #align add_subsemigroup.comap_sup_map_of_injective AddSubsemigroup.comap_sup_map_of_injective
 
 @[to_additive]
-theorem comap_supᵢ_map_of_injective (S : ι → Subsemigroup M) :
-    (⨆ i, (S i).map f).comap f = supᵢ S :=
-  (gciMapComap hf).u_supᵢ_l _
-#align subsemigroup.comap_supr_map_of_injective Subsemigroup.comap_supᵢ_map_of_injective
-#align add_subsemigroup.comap_supr_map_of_injective AddSubsemigroup.comap_supᵢ_map_of_injective
+theorem comap_iSup_map_of_injective (S : ι → Subsemigroup M) :
+    (⨆ i, (S i).map f).comap f = iSup S :=
+  (gciMapComap hf).u_iSup_l _
+#align subsemigroup.comap_supr_map_of_injective Subsemigroup.comap_iSup_map_of_injective
+#align add_subsemigroup.comap_supr_map_of_injective AddSubsemigroup.comap_iSup_map_of_injective
 
 @[to_additive]
 theorem map_le_map_iff_of_injective {S T : Subsemigroup M} : S.map f ≤ T.map f ↔ S ≤ T :=
@@ -480,11 +480,11 @@ theorem map_inf_comap_of_surjective (S T : Subsemigroup N) :
 #align add_subsemigroup.map_inf_comap_of_surjective AddSubsemigroup.map_inf_comap_of_surjective
 
 @[to_additive]
-theorem map_infᵢ_comap_of_surjective (S : ι → Subsemigroup N) :
-    (⨅ i, (S i).comap f).map f = infᵢ S :=
-  (giMapComap hf).l_infᵢ_u _
-#align subsemigroup.map_infi_comap_of_surjective Subsemigroup.map_infᵢ_comap_of_surjective
-#align add_subsemigroup.map_infi_comap_of_surjective AddSubsemigroup.map_infᵢ_comap_of_surjective
+theorem map_iInf_comap_of_surjective (S : ι → Subsemigroup N) :
+    (⨅ i, (S i).comap f).map f = iInf S :=
+  (giMapComap hf).l_iInf_u _
+#align subsemigroup.map_infi_comap_of_surjective Subsemigroup.map_iInf_comap_of_surjective
+#align add_subsemigroup.map_infi_comap_of_surjective AddSubsemigroup.map_iInf_comap_of_surjective
 
 @[to_additive]
 theorem map_sup_comap_of_surjective (S T : Subsemigroup N) :
@@ -494,11 +494,11 @@ theorem map_sup_comap_of_surjective (S T : Subsemigroup N) :
 #align add_subsemigroup.map_sup_comap_of_surjective AddSubsemigroup.map_sup_comap_of_surjective
 
 @[to_additive]
-theorem map_supᵢ_comap_of_surjective (S : ι → Subsemigroup N) :
-    (⨆ i, (S i).comap f).map f = supᵢ S :=
-  (giMapComap hf).l_supᵢ_u _
-#align subsemigroup.map_supr_comap_of_surjective Subsemigroup.map_supᵢ_comap_of_surjective
-#align add_subsemigroup.map_supr_comap_of_surjective AddSubsemigroup.map_supᵢ_comap_of_surjective
+theorem map_iSup_comap_of_surjective (S : ι → Subsemigroup N) :
+    (⨆ i, (S i).comap f).map f = iSup S :=
+  (giMapComap hf).l_iSup_u _
+#align subsemigroup.map_supr_comap_of_surjective Subsemigroup.map_iSup_comap_of_surjective
+#align add_subsemigroup.map_supr_comap_of_surjective AddSubsemigroup.map_iSup_comap_of_surjective
 
 @[to_additive]
 theorem comap_le_comap_iff_of_surjective {S T : Subsemigroup N} : S.comap f ≤ T.comap f ↔ S ≤ T :=
fix: replace symmApply by symm_apply (#2560)
Diff
@@ -92,7 +92,7 @@ def Subsemigroup.toAddSubsemigroup : Subsemigroup M ≃o AddSubsemigroup (Additi
   right_inv _ := rfl
   map_rel_iff':= Iff.rfl
 #align subsemigroup.to_add_subsemigroup Subsemigroup.toAddSubsemigroup
-#align subsemigroup.to_add_subsemigroup_symm_apply_coe Subsemigroup.toAddSubsemigroup_symmApply_coe
+#align subsemigroup.to_add_subsemigroup_symm_apply_coe Subsemigroup.toAddSubsemigroup_symm_apply_coe
 #align subsemigroup.to_add_subsemigroup_apply_coe Subsemigroup.toAddSubsemigroup_apply_coe
 
 /-- Additive subsemigroups of an additive semigroup `Additive M` are isomorphic to subsemigroups
@@ -140,7 +140,7 @@ def AddSubsemigroup.toSubsemigroup : AddSubsemigroup A ≃o Subsemigroup (Multip
   map_rel_iff' := Iff.rfl
 #align add_subsemigroup.to_subsemigroup AddSubsemigroup.toSubsemigroup
 #align add_subsemigroup.to_subsemigroup_apply_coe AddSubsemigroup.toSubsemigroup_apply_coe
-#align add_subsemigroup.to_subsemigroup_symm_apply_coe AddSubsemigroup.toSubsemigroup_symmApply_coe
+#align add_subsemigroup.to_subsemigroup_symm_apply_coe AddSubsemigroup.toSubsemigroup_symm_apply_coe
 
 /-- Subsemigroups of a semigroup `Multiplicative A` are isomorphic to additive subsemigroups
 of `A`. -/
@@ -596,8 +596,8 @@ def topEquiv : (⊤ : Subsemigroup M) ≃* M where
   map_mul' _ _ := rfl
 #align subsemigroup.top_equiv Subsemigroup.topEquiv
 #align add_subsemigroup.top_equiv AddSubsemigroup.topEquiv
-#align subsemigroup.top_equiv_symm_apply_coe Subsemigroup.topEquiv_symmApply_coe
-#align add_subsemigroup.top_equiv_symm_apply_coe AddSubsemigroup.topEquiv_symmApply_coe
+#align subsemigroup.top_equiv_symm_apply_coe Subsemigroup.topEquiv_symm_apply_coe
+#align add_subsemigroup.top_equiv_symm_apply_coe AddSubsemigroup.topEquiv_symm_apply_coe
 #align add_subsemigroup.top_equiv_apply AddSubsemigroup.topEquiv_apply
 
 @[to_additive (attr := simp)]
@@ -984,8 +984,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 semigroups `M` and `N` induces a `MulEquiv` between
 a subsemigroup `S ≤ M` and the subsemigroup `φ(S) ≤ N`.
@@ -1004,7 +1004,7 @@ def subsemigroupMap (e : M ≃* N) (S : Subsemigroup M) : S ≃* S.map e.toMulHo
 #align add_equiv.subsemigroup_map AddEquiv.subsemigroupMap
 #align mul_equiv.subsemigroup_map_apply_coe MulEquiv.subsemigroupMap_apply_coe
 #align add_equiv.subsemigroup_map_apply_coe AddEquiv.subsemigroupMap_apply_coe
-#align mul_equiv.subsemigroup_map_symm_apply_coe MulEquiv.subsemigroupMap_symmApply_coe
-#align add_equiv.subsemigroup_map_symm_apply_coe AddEquiv.subsemigroupMap_symmApply_coe
+#align mul_equiv.subsemigroup_map_symm_apply_coe MulEquiv.subsemigroupMap_symm_apply_coe
+#align add_equiv.subsemigroup_map_symm_apply_coe AddEquiv.subsemigroupMap_symm_apply_coe
 
 end MulEquiv
fix: use to_additive (attr := _) here and there (#2073)
Diff
@@ -586,7 +586,8 @@ namespace Subsemigroup
 variable [Mul M] [Mul N] [Mul P] (S : Subsemigroup M)
 
 /-- The top subsemigroup is isomorphic to the semigroup. -/
-@[to_additive "The top additive subsemigroup is isomorphic to the additive semigroup.", simps]
+@[to_additive (attr := simps)
+  "The top additive subsemigroup is isomorphic to the additive semigroup."]
 def topEquiv : (⊤ : Subsemigroup M) ≃* M where
   toFun x := x
   invFun x := ⟨x, mem_top x⟩
@@ -596,7 +597,8 @@ def topEquiv : (⊤ : Subsemigroup M) ≃* M where
 #align subsemigroup.top_equiv Subsemigroup.topEquiv
 #align add_subsemigroup.top_equiv AddSubsemigroup.topEquiv
 #align subsemigroup.top_equiv_symm_apply_coe Subsemigroup.topEquiv_symmApply_coe
-#align subsemigroup.top_equiv_apply Subsemigroup.topEquiv_apply
+#align add_subsemigroup.top_equiv_symm_apply_coe AddSubsemigroup.topEquiv_symmApply_coe
+#align add_subsemigroup.top_equiv_apply AddSubsemigroup.topEquiv_apply
 
 @[to_additive (attr := simp)]
 theorem topEquiv_toMulHom :
@@ -825,8 +827,8 @@ theorem restrict_apply {N : Type _} [Mul N] [SetLike σ M] [MulMemClass σ M] (f
 #align add_hom.restrict_apply AddHom.restrict_apply
 
 /-- Restriction of a semigroup hom to a subsemigroup of the codomain. -/
-@[to_additive "Restriction of an `AddSemigroup` hom to an `AddSubsemigroup` of the codomain.",
-  simps]
+@[to_additive (attr := simps)
+  "Restriction of an `AddSemigroup` hom to an `AddSubsemigroup` of the codomain."]
 def codRestrict [SetLike σ N] [MulMemClass σ N] (f : M →ₙ* N) (S : σ) (h : ∀ x, f x ∈ S) :
     M →ₙ* S where
   toFun n := ⟨f n, h n⟩
@@ -834,6 +836,7 @@ def codRestrict [SetLike σ N] [MulMemClass σ N] (f : M →ₙ* N) (S : σ) (h
 #align mul_hom.cod_restrict MulHom.codRestrict
 #align add_hom.cod_restrict AddHom.codRestrict
 #align mul_hom.cod_restrict_apply_coe MulHom.codRestrict_apply_coe
+#align add_hom.cod_restrict_apply_coe AddHom.codRestrict_apply_coe
 
 /-- Restriction of a semigroup hom to its range interpreted as a subsemigroup. -/
 @[to_additive "Restriction of an `AddSemigroup` hom to its range interpreted as a subsemigroup."]
@@ -863,7 +866,8 @@ theorem prod_map_comap_prod' {M' : Type _} {N' : Type _} [Mul M'] [Mul N'] (f :
 #align add_hom.sum_map_comap_sum' AddHom.prod_map_comap_prod'
 
 /-- The `MulHom` from the preimage of a subsemigroup to itself. -/
-@[to_additive "the `AddHom` from the preimage of an additive subsemigroup to itself.", simps]
+@[to_additive (attr := simps)
+  "The `AddHom` from the preimage of an additive subsemigroup to itself."]
 def subsemigroupComap (f : M →ₙ* N) (N' : Subsemigroup N) :
     N'.comap f →ₙ* N' where
   toFun x := ⟨f x, x.prop⟩
@@ -871,13 +875,13 @@ def subsemigroupComap (f : M →ₙ* N) (N' : Subsemigroup N) :
 #align mul_hom.subsemigroup_comap MulHom.subsemigroupComap
 #align add_hom.subsemigroup_comap AddHom.subsemigroupComap
 #align mul_hom.subsemigroup_comap_apply_coe MulHom.subsemigroupComap_apply_coe
+#align add_hom.add_subsemigroup_comap_apply_coe AddHom.subsemigroupComap_apply_coe
 
 /-- The `MulHom` from a subsemigroup to its image.
 See `MulEquiv.subsemigroupMap` for a variant for `MulEquiv`s. -/
-@[to_additive
+@[to_additive (attr := simps)
       "the `AddHom` from an additive subsemigroup to its image. See
-      `AddEquiv.addSubsemigroupMap` for a variant for `AddEquiv`s.",
-  simps]
+      `AddEquiv.addSubsemigroupMap` for a variant for `AddEquiv`s."]
 def subsemigroupMap (f : M →ₙ* N) (M' : Subsemigroup M) :
     M' →ₙ* M'.map f where
   toFun x := ⟨f x, ⟨x, x.prop, rfl⟩⟩
@@ -885,6 +889,7 @@ def subsemigroupMap (f : M →ₙ* N) (M' : Subsemigroup M) :
 #align mul_hom.subsemigroup_map MulHom.subsemigroupMap
 #align add_hom.subsemigroup_map AddHom.subsemigroupMap
 #align mul_hom.subsemigroup_map_apply_coe MulHom.subsemigroupMap_apply_coe
+#align add_hom.subsemigroup_map_apply_coe AddHom.subsemigroupMap_apply_coe
 
 @[to_additive]
 theorem subsemigroupMap_surjective (f : M →ₙ* N) (M' : Subsemigroup M) :
@@ -962,11 +967,10 @@ def subsemigroupCongr (h : S = T) : S ≃* T :=
 equivalence between `M` and `f.srange`.
 
 This is a bidirectional version of `MulHom.srangeRestrict`. -/
-@[to_additive
+@[to_additive (attr := simps (config := { simpRhs := true }))
       "An additive semigroup homomorphism `f : M →+ N` with a left-inverse
       `g : N → M` defines an additive equivalence between `M` and `f.srange`.
-      This is a bidirectional version of `AddHom.srangeRestrict`. ",
-  simps (config := { simpRhs := true })]
+      This is a bidirectional version of `AddHom.srangeRestrict`. "]
 def ofLeftInverse (f : M →ₙ* N) {g : N → M} (h : Function.LeftInverse g f) : M ≃* f.srange :=
   { f.srangeRestrict with
     toFun := f.srangeRestrict
@@ -979,16 +983,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 semigroups `M` and `N` induces a `MulEquiv` between
 a subsemigroup `S ≤ M` and the subsemigroup `φ(S) ≤ N`.
 See `MulHom.subsemigroupMap` for a variant for `MulHom`s. -/
-@[to_additive
+@[to_additive (attr := simps)
       "An `AddEquiv` `φ` between two additive semigroups `M` and `N` induces an `AddEquiv`
       between a subsemigroup `S ≤ M` and the subsemigroup `φ(S) ≤ N`.
-      See `AddHom.addSubsemigroupMap` for a variant for `AddHom`s.",
-  simps]
+      See `AddHom.addSubsemigroupMap` for a variant for `AddHom`s."]
 def subsemigroupMap (e : M ≃* N) (S : Subsemigroup M) : S ≃* S.map e.toMulHom :=
   { -- we restate this for `simps` to avoid `⇑e.symm.toEquiv x`
     e.toMulHom.subsemigroupMap S,
@@ -998,6 +1003,8 @@ def subsemigroupMap (e : M ≃* N) (S : Subsemigroup M) : S ≃* S.map e.toMulHo
 #align mul_equiv.subsemigroup_map MulEquiv.subsemigroupMap
 #align add_equiv.subsemigroup_map AddEquiv.subsemigroupMap
 #align mul_equiv.subsemigroup_map_apply_coe MulEquiv.subsemigroupMap_apply_coe
+#align add_equiv.subsemigroup_map_apply_coe AddEquiv.subsemigroupMap_apply_coe
 #align mul_equiv.subsemigroup_map_symm_apply_coe MulEquiv.subsemigroupMap_symmApply_coe
+#align add_equiv.subsemigroup_map_symm_apply_coe AddEquiv.subsemigroupMap_symmApply_coe
 
 end MulEquiv
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 Subsemigroup.toAddSubsemigroup : Subsemigroup M ≃o AddSubsemigroup (Additi
   right_inv _ := rfl
   map_rel_iff':= Iff.rfl
 #align subsemigroup.to_add_subsemigroup Subsemigroup.toAddSubsemigroup
+#align subsemigroup.to_add_subsemigroup_symm_apply_coe Subsemigroup.toAddSubsemigroup_symmApply_coe
+#align subsemigroup.to_add_subsemigroup_apply_coe Subsemigroup.toAddSubsemigroup_apply_coe
 
 /-- Additive subsemigroups of an additive semigroup `Additive M` are isomorphic to subsemigroups
 of `M`. -/
@@ -137,6 +139,8 @@ def AddSubsemigroup.toSubsemigroup : AddSubsemigroup A ≃o Subsemigroup (Multip
   right_inv _ := rfl
   map_rel_iff' := Iff.rfl
 #align add_subsemigroup.to_subsemigroup AddSubsemigroup.toSubsemigroup
+#align add_subsemigroup.to_subsemigroup_apply_coe AddSubsemigroup.toSubsemigroup_apply_coe
+#align add_subsemigroup.to_subsemigroup_symm_apply_coe AddSubsemigroup.toSubsemigroup_symmApply_coe
 
 /-- Subsemigroups of a semigroup `Multiplicative A` are isomorphic to additive subsemigroups
 of `A`. -/
@@ -591,6 +595,8 @@ def topEquiv : (⊤ : Subsemigroup M) ≃* M where
   map_mul' _ _ := rfl
 #align subsemigroup.top_equiv Subsemigroup.topEquiv
 #align add_subsemigroup.top_equiv AddSubsemigroup.topEquiv
+#align subsemigroup.top_equiv_symm_apply_coe Subsemigroup.topEquiv_symmApply_coe
+#align subsemigroup.top_equiv_apply Subsemigroup.topEquiv_apply
 
 @[to_additive (attr := simp)]
 theorem topEquiv_toMulHom :
@@ -827,6 +833,7 @@ def codRestrict [SetLike σ N] [MulMemClass σ N] (f : M →ₙ* N) (S : σ) (h
   map_mul' x y := Subtype.eq (map_mul f x y)
 #align mul_hom.cod_restrict MulHom.codRestrict
 #align add_hom.cod_restrict AddHom.codRestrict
+#align mul_hom.cod_restrict_apply_coe MulHom.codRestrict_apply_coe
 
 /-- Restriction of a semigroup hom to its range interpreted as a subsemigroup. -/
 @[to_additive "Restriction of an `AddSemigroup` hom to its range interpreted as a subsemigroup."]
@@ -863,6 +870,7 @@ def subsemigroupComap (f : M →ₙ* N) (N' : Subsemigroup N) :
   map_mul' x y := Subtype.eq (@map_mul M N _ _ _ _ f x y)
 #align mul_hom.subsemigroup_comap MulHom.subsemigroupComap
 #align add_hom.subsemigroup_comap AddHom.subsemigroupComap
+#align mul_hom.subsemigroup_comap_apply_coe MulHom.subsemigroupComap_apply_coe
 
 /-- The `MulHom` from a subsemigroup to its image.
 See `MulEquiv.subsemigroupMap` for a variant for `MulEquiv`s. -/
@@ -876,6 +884,7 @@ def subsemigroupMap (f : M →ₙ* N) (M' : Subsemigroup M) :
   map_mul' x y := Subtype.eq <| @map_mul M N _ _ _ _ f x y
 #align mul_hom.subsemigroup_map MulHom.subsemigroupMap
 #align add_hom.subsemigroup_map AddHom.subsemigroupMap
+#align mul_hom.subsemigroup_map_apply_coe MulHom.subsemigroupMap_apply_coe
 
 @[to_additive]
 theorem subsemigroupMap_surjective (f : M →ₙ* N) (M' : Subsemigroup M) :
@@ -969,6 +978,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 semigroups `M` and `N` induces a `MulEquiv` between
 a subsemigroup `S ≤ M` and the subsemigroup `φ(S) ≤ N`.
@@ -986,5 +997,7 @@ def subsemigroupMap (e : M ≃* N) (S : Subsemigroup M) : S ≃* S.map e.toMulHo
     invFun := fun x => ⟨e.symm x, _⟩ }
 #align mul_equiv.subsemigroup_map MulEquiv.subsemigroupMap
 #align add_equiv.subsemigroup_map AddEquiv.subsemigroupMap
+#align mul_equiv.subsemigroup_map_apply_coe MulEquiv.subsemigroupMap_apply_coe
+#align mul_equiv.subsemigroup_map_symm_apply_coe MulEquiv.subsemigroupMap_symmApply_coe
 
 end MulEquiv
chore: fix casing errors per naming scheme (#1670)
Diff
@@ -974,7 +974,7 @@ def ofLeftInverse (f : M →ₙ* N) {g : N → M} (h : Function.LeftInverse g f)
 a subsemigroup `S ≤ M` and the subsemigroup `φ(S) ≤ N`.
 See `MulHom.subsemigroupMap` for a variant for `MulHom`s. -/
 @[to_additive
-      "An `AddEquiv` `φ` between two additive semigroups `M` and `N` induces an `add_equiv`
+      "An `AddEquiv` `φ` between two additive semigroups `M` and `N` induces an `AddEquiv`
       between a subsemigroup `S ≤ M` and the subsemigroup `φ(S) ≤ N`.
       See `AddHom.addSubsemigroupMap` for a variant for `AddHom`s.",
   simps]
chore: add #align statements for to_additive decls (#1816)

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

Diff
@@ -604,6 +604,7 @@ theorem topEquiv_toMulHom :
 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 (map_mul f _ _) }
 #align subsemigroup.equiv_map_of_injective Subsemigroup.equivMapOfInjective
+#align add_subsemigroup.equiv_map_of_injective AddSubsemigroup.equivMapOfInjective
 
 @[to_additive (attr := simp)]
 theorem coe_equivMapOfInjective_apply (f : M →ₙ* N) (hf : Function.Injective f) (x : S) :
@@ -808,6 +809,7 @@ theorem map_mclosure (f : M →ₙ* N) (s : Set M) : (closure s).map f = closure
 def restrict {N : Type _} [Mul N] [SetLike σ M] [MulMemClass σ M] (f : M →ₙ* N) (S : σ) : S →ₙ* N :=
   f.comp (MulMemClass.subtype S)
 #align mul_hom.restrict MulHom.restrict
+#align add_hom.restrict AddHom.restrict
 
 @[to_additive (attr := simp)]
 theorem restrict_apply {N : Type _} [Mul N] [SetLike σ M] [MulMemClass σ M] (f : M →ₙ* N) {S : σ}
chore: fix most phantom #aligns (#1794)
Diff
@@ -184,7 +184,7 @@ def comap (f : M →ₙ* N) (S : Subsemigroup N) :
   carrier := f ⁻¹' S
   mul_mem' ha hb := show f (_ * _) ∈ S by rw [map_mul]; exact mul_mem ha hb
 #align subsemigroup.comap Subsemigroup.comap
-#align addsubemigroup.comp AddSubsemigroup.comap
+#align add_subsemigroup.comap AddSubsemigroup.comap
 
 @[to_additive (attr := simp)]
 theorem coe_comap (S : Subsemigroup N) (f : M →ₙ* N) : (S.comap f : Set M) = f ⁻¹' S :=
@@ -221,7 +221,7 @@ def map (f : M →ₙ* N) (S : Subsemigroup M) : Subsemigroup N where
     rintro _ _ ⟨x, hx, rfl⟩ ⟨y, hy, rfl⟩
     exact ⟨x * y, @mul_mem (Subsemigroup M) M _ _ _ _ _ _ hx hy, by rw [map_mul]⟩
 #align subsemigroup.map Subsemigroup.map
-#align addsubemigroup.map AddSubsemigroup.map
+#align add_subsemigroup.map AddSubsemigroup.map
 
 @[to_additive (attr := simp)]
 theorem coe_map (f : M →ₙ* N) (S : Subsemigroup M) : (S.map f : Set N) = f '' S :=
chore: the style linter shouldn't complain about long #align lines (#1643)
Diff
@@ -500,15 +500,13 @@ theorem map_supᵢ_comap_of_surjective (S : ι → Subsemigroup N) :
 theorem comap_le_comap_iff_of_surjective {S T : Subsemigroup N} : S.comap f ≤ T.comap f ↔ S ≤ T :=
   (giMapComap hf).u_le_u_iff
 #align subsemigroup.comap_le_comap_iff_of_surjective Subsemigroup.comap_le_comap_iff_of_surjective
-#align add_subsemigroup.comap_le_comap_iff_of_surjective
-  AddSubsemigroup.comap_le_comap_iff_of_surjective
+#align add_subsemigroup.comap_le_comap_iff_of_surjective AddSubsemigroup.comap_le_comap_iff_of_surjective
 
 @[to_additive]
 theorem comap_strictMono_of_surjective : StrictMono (comap f) :=
   (giMapComap hf).strictMono_u
 #align subsemigroup.comap_strict_mono_of_surjective Subsemigroup.comap_strictMono_of_surjective
-#align add_subsemigroup.comap_strict_mono_of_surjective
-  AddSubsemigroup.comap_strictMono_of_surjective
+#align add_subsemigroup.comap_strict_mono_of_surjective AddSubsemigroup.comap_strictMono_of_surjective
 
 end GaloisInsertion
 
@@ -612,8 +610,7 @@ theorem coe_equivMapOfInjective_apply (f : M →ₙ* N) (hf : Function.Injective
     (equivMapOfInjective S f hf x : N) = f x :=
   rfl
 #align subsemigroup.coe_equiv_map_of_injective_apply Subsemigroup.coe_equivMapOfInjective_apply
-#align add_subsemigroup.coe_equiv_map_of_injective_apply
-  AddSubsemigroup.coe_equivMapOfInjective_apply
+#align add_subsemigroup.coe_equiv_map_of_injective_apply AddSubsemigroup.coe_equivMapOfInjective_apply
 
 @[to_additive (attr := simp)]
 theorem closure_closure_coe_preimage {s : Set 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
@@ -186,13 +186,13 @@ def comap (f : M →ₙ* N) (S : Subsemigroup N) :
 #align subsemigroup.comap Subsemigroup.comap
 #align addsubemigroup.comp AddSubsemigroup.comap
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem coe_comap (S : Subsemigroup N) (f : M →ₙ* N) : (S.comap f : Set M) = f ⁻¹' S :=
   rfl
 #align subsemigroup.coe_comap Subsemigroup.coe_comap
 #align add_subsemigroup.coe_comap AddSubsemigroup.coe_comap
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem mem_comap {S : Subsemigroup N} {f : M →ₙ* N} {x : M} : x ∈ S.comap f ↔ f x ∈ S :=
   Iff.rfl
 #align subsemigroup.mem_comap Subsemigroup.mem_comap
@@ -205,7 +205,7 @@ theorem comap_comap (S : Subsemigroup P) (g : N →ₙ* P) (f : M →ₙ* N) :
 #align subsemigroup.comap_comap Subsemigroup.comap_comap
 #align add_subsemigroup.comap_comap AddSubsemigroup.comap_comap
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem comap_id (S : Subsemigroup P) : S.comap (MulHom.id _) = S :=
   ext (by simp)
 #align subsemigroup.comap_id Subsemigroup.comap_id
@@ -223,13 +223,13 @@ def map (f : M →ₙ* N) (S : Subsemigroup M) : Subsemigroup N where
 #align subsemigroup.map Subsemigroup.map
 #align addsubemigroup.map AddSubsemigroup.map
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem coe_map (f : M →ₙ* N) (S : Subsemigroup M) : (S.map f : Set N) = f '' S :=
   rfl
 #align subsemigroup.coe_map Subsemigroup.coe_map
 #align add_subsemigroup.coe_map AddSubsemigroup.coe_map
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem mem_map {f : M →ₙ* N} {S : Subsemigroup M} {y : N} : y ∈ S.map f ↔ ∃ x ∈ S, f x = y :=
   mem_image _ _ _
 #align subsemigroup.mem_map Subsemigroup.mem_map
@@ -309,13 +309,13 @@ theorem monotone_comap {f : M →ₙ* N} : Monotone (comap f) :=
 #align subsemigroup.monotone_comap Subsemigroup.monotone_comap
 #align add_subsemigroup.monotone_comap AddSubsemigroup.monotone_comap
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem map_comap_map {f : M →ₙ* N} : ((S.map f).comap f).map f = S.map f :=
   (gc_map_comap f).l_u_l_eq_l _
 #align subsemigroup.map_comap_map Subsemigroup.map_comap_map
 #align add_subsemigroup.map_comap_map AddSubsemigroup.map_comap_map
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem comap_map_comap {S : Subsemigroup N} {f : M →ₙ* N} :
     ((S.comap f).map f).comap f = S.comap f :=
   (gc_map_comap f).u_l_u_eq_u _
@@ -348,19 +348,19 @@ theorem comap_infᵢ {ι : Sort _} (f : M →ₙ* N) (s : ι → Subsemigroup N)
 #align subsemigroup.comap_infi Subsemigroup.comap_infᵢ
 #align add_subsemigroup.comap_infi AddSubsemigroup.comap_infᵢ
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem map_bot (f : M →ₙ* N) : (⊥ : Subsemigroup M).map f = ⊥ :=
   (gc_map_comap f).l_bot
 #align subsemigroup.map_bot Subsemigroup.map_bot
 #align add_subsemigroup.map_bot AddSubsemigroup.map_bot
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem comap_top (f : M →ₙ* N) : (⊤ : Subsemigroup N).comap f = ⊤ :=
   (gc_map_comap f).u_top
 #align subsemigroup.comap_top Subsemigroup.comap_top
 #align add_subsemigroup.comap_top AddSubsemigroup.comap_top
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem map_id (S : Subsemigroup M) : S.map (MulHom.id M) = S :=
   ext fun _ => ⟨fun ⟨_, h, rfl⟩ => h, fun h => ⟨_, h, rfl⟩⟩
 #align subsemigroup.map_id Subsemigroup.map_id
@@ -527,14 +527,14 @@ instance (priority := 900) mul : Mul S' :=
 #align add_mem_class.has_add AddMemClass.add
 
 -- lower priority so later simp lemmas are used first; to appease simp_nf
-@[simp low, norm_cast, to_additive]
+@[to_additive (attr := simp low, norm_cast)]
 theorem coe_mul (x y : S') : (↑(x * y) : M) = ↑x * ↑y :=
   rfl
 #align mul_mem_class.coe_mul MulMemClass.coe_mul
 #align add_mem_class.coe_add AddMemClass.coe_add
 
 -- lower priority so later simp lemmas are used first; to appease simp_nf
-@[simp low, to_additive]
+@[to_additive (attr := simp low)]
 theorem mk_mul_mk (x y : M) (hx : x ∈ S') (hy : y ∈ S') :
     (⟨x, hx⟩ : S') * ⟨y, hy⟩ = ⟨x * y, mul_mem hx hy⟩ :=
   rfl
@@ -571,7 +571,7 @@ def subtype : S' →ₙ* M :=
 #align mul_mem_class.subtype MulMemClass.subtype
 #align add_mem_class.subtype AddMemClass.subtype
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem coe_subtype : (MulMemClass.subtype S' : S' → M) = Subtype.val :=
   rfl
 #align mul_mem_class.coe_subtype MulMemClass.coe_subtype
@@ -594,7 +594,7 @@ def topEquiv : (⊤ : Subsemigroup M) ≃* M where
 #align subsemigroup.top_equiv Subsemigroup.topEquiv
 #align add_subsemigroup.top_equiv AddSubsemigroup.topEquiv
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem topEquiv_toMulHom :
     (topEquiv : _ ≃* M).toMulHom = MulMemClass.subtype (⊤ : Subsemigroup M) :=
   rfl
@@ -607,7 +607,7 @@ noncomputable def equivMapOfInjective (f : M →ₙ* N) (hf : Function.Injective
   { Equiv.Set.image f S hf with map_mul' := fun _ _ => Subtype.ext (map_mul f _ _) }
 #align subsemigroup.equiv_map_of_injective Subsemigroup.equivMapOfInjective
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem coe_equivMapOfInjective_apply (f : M →ₙ* N) (hf : Function.Injective f) (x : S) :
     (equivMapOfInjective S f hf x : N) = f x :=
   rfl
@@ -615,7 +615,7 @@ theorem coe_equivMapOfInjective_apply (f : M →ₙ* N) (hf : Function.Injective
 #align add_subsemigroup.coe_equiv_map_of_injective_apply
   AddSubsemigroup.coe_equivMapOfInjective_apply
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem closure_closure_coe_preimage {s : Set M} :
     closure ((Subtype.val : closure s → M) ⁻¹' s) = ⊤ :=
   eq_top_iff.2 fun x =>
@@ -668,7 +668,7 @@ theorem top_prod (s : Subsemigroup N) : (⊤ : Subsemigroup M).prod s = s.comap
 #align subsemigroup.top_prod Subsemigroup.top_prod
 #align add_subsemigroup.top_prod AddSubsemigroup.top_prod
 
-@[simp, to_additive top_prod_top]
+@[to_additive (attr := simp) top_prod_top]
 theorem top_prod_top : (⊤ : Subsemigroup M).prod (⊤ : Subsemigroup N) = ⊤ :=
   (top_prod _).trans <| comap_top _
 #align subsemigroup.top_prod_top Subsemigroup.top_prod_top
@@ -712,7 +712,7 @@ theorem comap_equiv_eq_map_symm (f : N ≃* M) (K : Subsemigroup M) :
 #align subsemigroup.comap_equiv_eq_map_symm Subsemigroup.comap_equiv_eq_map_symm
 #align add_subsemigroup.comap_equiv_eq_map_symm AddSubsemigroup.comap_equiv_eq_map_symm
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem map_equiv_top (f : M ≃* N) : (⊤ : Subsemigroup M).map f.toMulHom = ⊤ :=
   SetLike.coe_injective <| Set.image_univ.trans f.surjective.range_eq
 #align subsemigroup.map_equiv_top Subsemigroup.map_equiv_top
@@ -748,13 +748,13 @@ def srange (f : M →ₙ* N) : Subsemigroup N :=
 #align mul_hom.srange MulHom.srange
 #align add_hom.srange AddHom.srange
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem coe_srange (f : M →ₙ* N) : (f.srange : Set N) = Set.range f :=
   rfl
 #align mul_hom.coe_srange MulHom.coe_srange
 #align add_hom.coe_srange AddHom.coe_srange
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem mem_srange {f : M →ₙ* N} {y : N} : y ∈ f.srange ↔ ∃ x, f x = y :=
   Iff.rfl
 #align mul_hom.mem_srange MulHom.mem_srange
@@ -812,7 +812,7 @@ def restrict {N : Type _} [Mul N] [SetLike σ M] [MulMemClass σ M] (f : M →
   f.comp (MulMemClass.subtype S)
 #align mul_hom.restrict MulHom.restrict
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem restrict_apply {N : Type _} [Mul N] [SetLike σ M] [MulMemClass σ M] (f : M →ₙ* N) {S : σ}
     (x : S) : f.restrict S x = f x :=
   rfl
@@ -836,7 +836,7 @@ def srangeRestrict {N} [Mul N] (f : M →ₙ* N) : M →ₙ* f.srange :=
 #align mul_hom.srange_restrict MulHom.srangeRestrict
 #align add_hom.srange_restrict AddHom.srangeRestrict
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem coe_srangeRestrict {N} [Mul N] (f : M →ₙ* N) (x : M) : (f.srangeRestrict x : N) = f x :=
   rfl
 #align mul_hom.coe_srange_restrict MulHom.coe_srangeRestrict
@@ -894,13 +894,13 @@ open MulHom
 
 variable [Mul M] [Mul N] [Mul P] (S : Subsemigroup M)
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem srange_fst [Nonempty N] : (fst M N).srange = ⊤ :=
   (fst M N).srange_top_of_surjective <| Prod.fst_surjective
 #align subsemigroup.srange_fst Subsemigroup.srange_fst
 #align add_subsemigroup.srange_fst AddSubsemigroup.srange_fst
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem srange_snd [Nonempty M] : (snd M N).srange = ⊤ :=
   (snd M N).srange_top_of_surjective <| Prod.snd_surjective
 #align subsemigroup.srange_snd Subsemigroup.srange_snd
@@ -921,7 +921,7 @@ def inclusion {S T : Subsemigroup M} (h : S ≤ T) : S →ₙ* T :=
 #align subsemigroup.inclusion Subsemigroup.inclusion
 #align add_subsemigroup.inclusion AddSubsemigroup.inclusion
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem range_subtype (s : Subsemigroup M) : (MulMemClass.subtype s).srange = s :=
   SetLike.coe_injective <| (coe_srange _).trans <| Subtype.range_coe
 #align subsemigroup.range_subtype Subsemigroup.range_subtype
feat: port GroupTheory.Subsemigroup.Operations (#1235)

Co-authored-by: Chris Hughes <33847686+ChrisHughes24@users.noreply.github.com>

Dependencies 84

85 files ported (100.0%)
43672 lines ported (100.0%)

All dependencies are ported!