group_theory.free_productMathlib.GroupTheory.CoprodI

This file has been ported!

Changes since the initial port

The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -5,10 +5,10 @@ Authors: David Wärn, Joachim Breitner
 -/
 import Algebra.FreeMonoid.Basic
 import GroupTheory.Congruence
-import GroupTheory.IsFreeGroup
+import GroupTheory.FreeGroup.IsFreeGroup
 import Data.List.Chain
 import SetTheory.Cardinal.Ordinal
-import Data.Set.Pointwise.Smul
+import Data.Set.Pointwise.SMul
 
 #align_import group_theory.free_product from "leanprover-community/mathlib"@"cb3ceec8485239a61ed51d944cb9a95b68c6bafc"
 
Diff
@@ -397,9 +397,9 @@ theorem Monoid.CoprodI.Word.rcons_inj {i} :
   by
   rintro ⟨m, w, h⟩ ⟨m', w', h'⟩ he
   by_cases hm : m = 1 <;> by_cases hm' : m' = 1
-  · simp only [rcons, dif_pos hm, dif_pos hm'] at he ; cc
-  · exfalso; simp only [rcons, dif_pos hm, dif_neg hm'] at he ; rw [he] at h ; exact h rfl
-  · exfalso; simp only [rcons, dif_pos hm', dif_neg hm] at he ; rw [← he] at h' ; exact h' rfl
+  · simp only [rcons, dif_pos hm, dif_pos hm'] at he; cc
+  · exfalso; simp only [rcons, dif_pos hm, dif_neg hm'] at he; rw [he] at h; exact h rfl
+  · exfalso; simp only [rcons, dif_pos hm', dif_neg hm] at he; rw [← he] at h'; exact h' rfl
   · have : m = m' ∧ w.to_list = w'.to_list := by
       simpa only [rcons, dif_neg hm, dif_neg hm', true_and_iff, eq_self_iff_true, Subtype.mk_eq_mk,
         heq_iff_eq, ← Subtype.ext_iff_val] using he
@@ -625,7 +625,7 @@ def Monoid.CoprodI.NeWord.toWord {i j} (w : Monoid.CoprodI.NeWord M i j) : Monoi
       exact w_hne1
       exfalso; apply H
     · intro l h
-      simp only [to_list, List.mem_append] at h 
+      simp only [to_list, List.mem_append] at h
       cases h
       · exact w_ih_w₁ _ h
       · exact w_ih_w₂ _ h
@@ -634,8 +634,8 @@ def Monoid.CoprodI.NeWord.toWord {i j} (w : Monoid.CoprodI.NeWord M i j) : Monoi
     · exact List.chain'_singleton _
     · apply List.Chain'.append w_ih_w₁ w_ih_w₂
       intro x hx y hy
-      rw [w_w₁.to_list_last', Option.mem_some_iff] at hx 
-      rw [w_w₂.to_list_head', Option.mem_some_iff] at hy 
+      rw [w_w₁.to_list_last', Option.mem_some_iff] at hx
+      rw [w_w₂.to_list_head', Option.mem_some_iff] at hy
       subst hx; subst hy
       exact w_hne
 #align free_product.neword.to_word Monoid.CoprodI.NeWord.toWord
@@ -652,11 +652,11 @@ theorem Monoid.CoprodI.NeWord.of_word (w : Monoid.CoprodI.Word M) (h : w ≠ Emp
   cases' w with l hnot1 hchain
   induction' l with x l hi
   · contradiction
-  · rw [List.forall_mem_cons] at hnot1 
+  · rw [List.forall_mem_cons] at hnot1
     cases' l with y l
     · refine' ⟨x.1, x.1, singleton x.2 hnot1.1, _⟩
       simp [to_word]
-    · rw [List.chain'_cons] at hchain 
+    · rw [List.chain'_cons] at hchain
       specialize hi hnot1.2 hchain.2 (by rintro ⟨rfl⟩)
       obtain ⟨i, j, w', hw' : w'.to_list = y::l⟩ := hi
       obtain rfl : y = ⟨i, w'.head⟩ := by simpa [hw'] using w'.to_list_head'
@@ -904,15 +904,15 @@ theorem Monoid.CoprodI.lift_word_prod_nontrivial_of_not_empty {i j}
     · subst hh; subst hl
       exact lift_word_prod_nontrivial_of_head_eq_last f X hXnonempty hXdisj hpp w
     · subst hh
-      change j ≠ i at hl 
+      change j ≠ i at hl
       exact lift_word_prod_nontrivial_of_head_card f X hXnonempty hXdisj hpp w hcard hl.symm
     · subst hl
-      change i ≠ j at hh 
+      change i ≠ j at hh
       have : lift f w.inv.prod ≠ 1 :=
         lift_word_prod_nontrivial_of_head_card f X hXnonempty hXdisj hpp w.inv hcard hh.symm
       intro heq; apply this; simpa using HEq
-    · change i ≠ k at hh 
-      change j ≠ k at hl 
+    · change i ≠ k at hh
+      change j ≠ k at hl
       obtain ⟨h, hn1, -⟩ := Cardinal.three_le hcard 1 1
       let w' : neword H k k :=
         neword.append (neword.append (neword.singleton h hn1) hh.symm w) hl
Diff
@@ -200,7 +200,7 @@ theorem Monoid.CoprodI.of_leftInverse [DecidableEq ι] (i : ι) :
 
 #print Monoid.CoprodI.of_injective /-
 theorem Monoid.CoprodI.of_injective (i : ι) : Function.Injective ⇑(Monoid.CoprodI.of : M i →* _) :=
-  by classical
+  by classical exact (of_left_inverse i).Injective
 #align free_product.of_injective Monoid.CoprodI.of_injective
 -/
 
@@ -894,7 +894,32 @@ theorem Monoid.CoprodI.lift_word_prod_nontrivial_of_head_card {i j}
 
 #print Monoid.CoprodI.lift_word_prod_nontrivial_of_not_empty /-
 theorem Monoid.CoprodI.lift_word_prod_nontrivial_of_not_empty {i j}
-    (w : Monoid.CoprodI.NeWord H i j) : Monoid.CoprodI.lift f w.Prod ≠ 1 := by classical
+    (w : Monoid.CoprodI.NeWord H i j) : Monoid.CoprodI.lift f w.Prod ≠ 1 := by
+  classical
+  cases hcard
+  · obtain ⟨i, h1, h2⟩ := Cardinal.three_le hcard i j
+    exact lift_word_prod_nontrivial_of_other_i f X hXnonempty hXdisj hpp w h1 h2
+  · cases' hcard with k hcard
+    by_cases hh : i = k <;> by_cases hl : j = k
+    · subst hh; subst hl
+      exact lift_word_prod_nontrivial_of_head_eq_last f X hXnonempty hXdisj hpp w
+    · subst hh
+      change j ≠ i at hl 
+      exact lift_word_prod_nontrivial_of_head_card f X hXnonempty hXdisj hpp w hcard hl.symm
+    · subst hl
+      change i ≠ j at hh 
+      have : lift f w.inv.prod ≠ 1 :=
+        lift_word_prod_nontrivial_of_head_card f X hXnonempty hXdisj hpp w.inv hcard hh.symm
+      intro heq; apply this; simpa using HEq
+    · change i ≠ k at hh 
+      change j ≠ k at hl 
+      obtain ⟨h, hn1, -⟩ := Cardinal.three_le hcard 1 1
+      let w' : neword H k k :=
+        neword.append (neword.append (neword.singleton h hn1) hh.symm w) hl
+          (neword.singleton h⁻¹ (inv_ne_one.mpr hn1))
+      have hw' : lift f w'.prod ≠ 1 :=
+        lift_word_prod_nontrivial_of_head_eq_last f X hXnonempty hXdisj hpp w'
+      intro heq1; apply hw'; simp [w', heq1]
 #align free_product.lift_word_prod_nontrivial_of_not_empty Monoid.CoprodI.lift_word_prod_nontrivial_of_not_empty
 -/
 
@@ -923,7 +948,14 @@ Usually the Ping-Pong-Lemma requires that one group `H i` has at least three ele
 condition is only needed if `# ι = 2`, and we accept `3 ≤ # ι` as an alternative.
 -/
 theorem Monoid.CoprodI.lift_injective_of_ping_pong : Function.Injective (Monoid.CoprodI.lift f) :=
-  by classical
+  by
+  classical
+  apply (injective_iff_map_eq_one (lift f)).mpr
+  rw [(Monoid.CoprodI.Word.equiv : _ ≃ word H).forall_congr_left']
+  · intro w Heq
+    dsimp [word.equiv] at *
+    · rw [empty_of_word_prod_eq_one f hcard X hXnonempty hXdisj hpp Heq]
+      rfl
 #align free_product.lift_injective_of_ping_pong Monoid.CoprodI.lift_injective_of_ping_pong
 -/
 
Diff
@@ -200,7 +200,7 @@ theorem Monoid.CoprodI.of_leftInverse [DecidableEq ι] (i : ι) :
 
 #print Monoid.CoprodI.of_injective /-
 theorem Monoid.CoprodI.of_injective (i : ι) : Function.Injective ⇑(Monoid.CoprodI.of : M i →* _) :=
-  by classical exact (of_left_inverse i).Injective
+  by classical
 #align free_product.of_injective Monoid.CoprodI.of_injective
 -/
 
@@ -894,32 +894,7 @@ theorem Monoid.CoprodI.lift_word_prod_nontrivial_of_head_card {i j}
 
 #print Monoid.CoprodI.lift_word_prod_nontrivial_of_not_empty /-
 theorem Monoid.CoprodI.lift_word_prod_nontrivial_of_not_empty {i j}
-    (w : Monoid.CoprodI.NeWord H i j) : Monoid.CoprodI.lift f w.Prod ≠ 1 := by
-  classical
-  cases hcard
-  · obtain ⟨i, h1, h2⟩ := Cardinal.three_le hcard i j
-    exact lift_word_prod_nontrivial_of_other_i f X hXnonempty hXdisj hpp w h1 h2
-  · cases' hcard with k hcard
-    by_cases hh : i = k <;> by_cases hl : j = k
-    · subst hh; subst hl
-      exact lift_word_prod_nontrivial_of_head_eq_last f X hXnonempty hXdisj hpp w
-    · subst hh
-      change j ≠ i at hl 
-      exact lift_word_prod_nontrivial_of_head_card f X hXnonempty hXdisj hpp w hcard hl.symm
-    · subst hl
-      change i ≠ j at hh 
-      have : lift f w.inv.prod ≠ 1 :=
-        lift_word_prod_nontrivial_of_head_card f X hXnonempty hXdisj hpp w.inv hcard hh.symm
-      intro heq; apply this; simpa using HEq
-    · change i ≠ k at hh 
-      change j ≠ k at hl 
-      obtain ⟨h, hn1, -⟩ := Cardinal.three_le hcard 1 1
-      let w' : neword H k k :=
-        neword.append (neword.append (neword.singleton h hn1) hh.symm w) hl
-          (neword.singleton h⁻¹ (inv_ne_one.mpr hn1))
-      have hw' : lift f w'.prod ≠ 1 :=
-        lift_word_prod_nontrivial_of_head_eq_last f X hXnonempty hXdisj hpp w'
-      intro heq1; apply hw'; simp [w', heq1]
+    (w : Monoid.CoprodI.NeWord H i j) : Monoid.CoprodI.lift f w.Prod ≠ 1 := by classical
 #align free_product.lift_word_prod_nontrivial_of_not_empty Monoid.CoprodI.lift_word_prod_nontrivial_of_not_empty
 -/
 
@@ -948,14 +923,7 @@ Usually the Ping-Pong-Lemma requires that one group `H i` has at least three ele
 condition is only needed if `# ι = 2`, and we accept `3 ≤ # ι` as an alternative.
 -/
 theorem Monoid.CoprodI.lift_injective_of_ping_pong : Function.Injective (Monoid.CoprodI.lift f) :=
-  by
-  classical
-  apply (injective_iff_map_eq_one (lift f)).mpr
-  rw [(Monoid.CoprodI.Word.equiv : _ ≃ word H).forall_congr_left']
-  · intro w Heq
-    dsimp [word.equiv] at *
-    · rw [empty_of_word_prod_eq_one f hcard X hXnonempty hXdisj hpp Heq]
-      rfl
+  by classical
 #align free_product.lift_injective_of_ping_pong Monoid.CoprodI.lift_injective_of_ping_pong
 -/
 
Diff
@@ -3,12 +3,12 @@ Copyright (c) 2021 David Wärn. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: David Wärn, Joachim Breitner
 -/
-import Mathbin.Algebra.FreeMonoid.Basic
-import Mathbin.GroupTheory.Congruence
-import Mathbin.GroupTheory.IsFreeGroup
-import Mathbin.Data.List.Chain
-import Mathbin.SetTheory.Cardinal.Ordinal
-import Mathbin.Data.Set.Pointwise.Smul
+import Algebra.FreeMonoid.Basic
+import GroupTheory.Congruence
+import GroupTheory.IsFreeGroup
+import Data.List.Chain
+import SetTheory.Cardinal.Ordinal
+import Data.Set.Pointwise.Smul
 
 #align_import group_theory.free_product from "leanprover-community/mathlib"@"cb3ceec8485239a61ed51d944cb9a95b68c6bafc"
 
Diff
@@ -373,14 +373,12 @@ private def mk_aux {l} (ls : List (Σ i, M i)) (h1 : ∀ l' ∈ l::ls, Sigma.snd
   ⟨ls, fun l' hl => h1 _ (List.mem_cons_of_mem _ hl), h2.tail⟩
 
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-#print Monoid.CoprodI.Word.cons_eq_rcons /-
 theorem Monoid.CoprodI.Word.cons_eq_rcons {i} {m : M i} {ls h1 h2} :
     Monoid.CoprodI.Word.mk (⟨i, m⟩::ls) h1 h2 =
       Monoid.CoprodI.Word.rcons
         ⟨m, mkAux ls h1 h2, Monoid.CoprodI.Word.fstIdx_ne_iff.mpr h2.rel_head?⟩ :=
   by rw [rcons, dif_neg]; rfl; exact h1 ⟨i, m⟩ (ls.mem_cons_self _)
 #align free_product.word.cons_eq_rcons Monoid.CoprodI.Word.cons_eq_rcons
--/
 
 #print Monoid.CoprodI.Word.prod_rcons /-
 @[simp]
Diff
@@ -249,7 +249,7 @@ theorem Monoid.CoprodI.inv_def (x : Monoid.CoprodI G) :
 
 instance : Group (Monoid.CoprodI G) :=
   { Monoid.CoprodI.hasInv G, Monoid.CoprodI.monoid G with
-    mul_left_inv := by
+    hMul_left_inv := by
       intro m
       rw [inv_def]
       apply m.induction_on
@@ -463,7 +463,7 @@ instance Monoid.CoprodI.Word.summandAction (i) : MulAction (M i) (Monoid.CoprodI
       { Monoid.CoprodI.Word.equivPair i w with
         headI := m * (Monoid.CoprodI.Word.equivPair i w).headI }
   one_smul w := by simp_rw [one_mul]; apply (equiv_pair i).symm_apply_eq.mpr; ext <;> rfl
-  mul_smul m m' w := by simp only [mul_assoc, ← equiv_pair_symm, Equiv.apply_symm_apply]
+  hMul_smul m m' w := by simp only [mul_assoc, ← equiv_pair_symm, Equiv.apply_symm_apply]
 #align free_product.word.summand_action Monoid.CoprodI.Word.summandAction
 -/
 
@@ -852,7 +852,7 @@ theorem Monoid.CoprodI.lift_word_ping_pong {i j k} (w : Monoid.CoprodI.NeWord H
   ·
     calc
       lift f (neword.append w₁ hne w₂).Prod • X m = lift f w₁.prod • lift f w₂.prod • X m := by
-        simp [MulAction.mul_smul]
+        simp [MulAction.hMul_smul]
       _ ⊆ lift f w₁.prod • X k := (set_smul_subset_set_smul_iff.mpr (hIw₂ hm))
       _ ⊆ X i := hIw₁ hne
 #align free_product.lift_word_ping_pong Monoid.CoprodI.lift_word_ping_pong
@@ -1087,7 +1087,7 @@ theorem FreeGroup.injective_lift_of_ping_pong : Function.Injective (FreeGroup.li
           · intro n hle hi
             calc
               a i ^ (n + 1) • Y iᶜ = (a i ^ n * a i) • Y iᶜ := by rw [zpow_add, zpow_one]
-              _ = a i ^ n • a i • Y iᶜ := (MulAction.mul_smul _ _ _)
+              _ = a i ^ n • a i • Y iᶜ := (MulAction.hMul_smul _ _ _)
               _ ⊆ a i ^ n • X i := (smul_set_mono <| hX i)
               _ ⊆ a i ^ n • Y iᶜ := (smul_set_mono (hXYdisj i i).subset_compl_right)
               _ ⊆ X i := hi
@@ -1102,7 +1102,7 @@ theorem FreeGroup.injective_lift_of_ping_pong : Function.Injective (FreeGroup.li
           · intro n hle hi
             calc
               a i ^ (n - 1) • X iᶜ = (a i ^ n * (a i)⁻¹) • X iᶜ := by rw [zpow_sub, zpow_one]
-              _ = a i ^ n • (a i)⁻¹ • X iᶜ := (MulAction.mul_smul _ _ _)
+              _ = a i ^ n • (a i)⁻¹ • X iᶜ := (MulAction.hMul_smul _ _ _)
               _ ⊆ a i ^ n • Y i := (smul_set_mono <| hY i)
               _ ⊆ a i ^ n • X iᶜ := (smul_set_mono (hXYdisj i i).symm.subset_compl_right)
               _ ⊆ Y i := hi
Diff
@@ -74,74 +74,76 @@ open Set
 
 variable {ι : Type _} (M : ∀ i : ι, Type _) [∀ i, Monoid (M i)]
 
-#print FreeProduct.Rel /-
+#print Monoid.CoprodI.Rel /-
 /-- A relation on the free monoid on alphabet `Σ i, M i`, relating `⟨i, 1⟩` with `1` and
 `⟨i, x⟩ * ⟨i, y⟩` with `⟨i, x * y⟩`. -/
-inductive FreeProduct.Rel : FreeMonoid (Σ i, M i) → FreeMonoid (Σ i, M i) → Prop
-  | of_one (i : ι) : FreeProduct.Rel (FreeMonoid.of ⟨i, 1⟩) 1
+inductive Monoid.CoprodI.Rel : FreeMonoid (Σ i, M i) → FreeMonoid (Σ i, M i) → Prop
+  | of_one (i : ι) : Monoid.CoprodI.Rel (FreeMonoid.of ⟨i, 1⟩) 1
   |
   of_mul {i : ι} (x y : M i) :
-    FreeProduct.Rel (FreeMonoid.of ⟨i, x⟩ * FreeMonoid.of ⟨i, y⟩) (FreeMonoid.of ⟨i, x * y⟩)
-#align free_product.rel FreeProduct.Rel
+    Monoid.CoprodI.Rel (FreeMonoid.of ⟨i, x⟩ * FreeMonoid.of ⟨i, y⟩) (FreeMonoid.of ⟨i, x * y⟩)
+#align free_product.rel Monoid.CoprodI.Rel
 -/
 
-#print FreeProduct /-
+#print Monoid.CoprodI /-
 /-- The free product (categorical coproduct) of an indexed family of monoids. -/
-def FreeProduct : Type _ :=
-  (conGen (FreeProduct.Rel M)).Quotient
+def Monoid.CoprodI : Type _ :=
+  (conGen (Monoid.CoprodI.Rel M)).Quotient
 deriving Monoid, Inhabited
-#align free_product FreeProduct
+#align free_product Monoid.CoprodI
 -/
 
-namespace FreeProduct
+namespace Monoid.CoprodI
 
-#print FreeProduct.Word /-
+#print Monoid.CoprodI.Word /-
 /-- The type of reduced words. A reduced word cannot contain a letter `1`, and no two adjacent
 letters can come from the same summand. -/
 @[ext]
-structure Word where
+structure Monoid.CoprodI.Word where
   toList : List (Σ i, M i)
   ne_one : ∀ l ∈ to_list, Sigma.snd l ≠ 1
   chain_ne : to_list.Chain' fun l l' => Sigma.fst l ≠ Sigma.fst l'
-#align free_product.word FreeProduct.Word
+#align free_product.word Monoid.CoprodI.Word
 -/
 
 variable {M}
 
-#print FreeProduct.of /-
+#print Monoid.CoprodI.of /-
 /-- The inclusion of a summand into the free product. -/
-def of {i : ι} : M i →* FreeProduct M
+def Monoid.CoprodI.of {i : ι} : M i →* Monoid.CoprodI M
     where
   toFun x := Con.mk' _ (FreeMonoid.of <| Sigma.mk i x)
-  map_one' := (Con.eq _).mpr (ConGen.Rel.of _ _ (FreeProduct.Rel.of_one i))
-  map_mul' x y := Eq.symm <| (Con.eq _).mpr (ConGen.Rel.of _ _ (FreeProduct.Rel.of_mul x y))
-#align free_product.of FreeProduct.of
+  map_one' := (Con.eq _).mpr (ConGen.Rel.of _ _ (Monoid.CoprodI.Rel.of_one i))
+  map_mul' x y := Eq.symm <| (Con.eq _).mpr (ConGen.Rel.of _ _ (Monoid.CoprodI.Rel.of_mul x y))
+#align free_product.of Monoid.CoprodI.of
 -/
 
-#print FreeProduct.of_apply /-
-theorem of_apply {i} (m : M i) : of m = Con.mk' _ (FreeMonoid.of <| Sigma.mk i m) :=
+#print Monoid.CoprodI.of_apply /-
+theorem Monoid.CoprodI.of_apply {i} (m : M i) :
+    Monoid.CoprodI.of m = Con.mk' _ (FreeMonoid.of <| Sigma.mk i m) :=
   rfl
-#align free_product.of_apply FreeProduct.of_apply
+#align free_product.of_apply Monoid.CoprodI.of_apply
 -/
 
 variable {N : Type _} [Monoid N]
 
-#print FreeProduct.ext_hom /-
+#print Monoid.CoprodI.ext_hom /-
 /-- See note [partially-applied ext lemmas]. -/
 @[ext]
-theorem ext_hom (f g : FreeProduct M →* N) (h : ∀ i, f.comp (of : M i →* _) = g.comp of) : f = g :=
+theorem Monoid.CoprodI.ext_hom (f g : Monoid.CoprodI M →* N)
+    (h : ∀ i, f.comp (Monoid.CoprodI.of : M i →* _) = g.comp Monoid.CoprodI.of) : f = g :=
   (MonoidHom.cancel_right Con.mk'_surjective).mp <|
     FreeMonoid.hom_eq fun ⟨i, x⟩ => by
       rw [MonoidHom.comp_apply, MonoidHom.comp_apply, ← of_apply, ← MonoidHom.comp_apply, ←
         MonoidHom.comp_apply, h]
-#align free_product.ext_hom FreeProduct.ext_hom
+#align free_product.ext_hom Monoid.CoprodI.ext_hom
 -/
 
-#print FreeProduct.lift /-
+#print Monoid.CoprodI.lift /-
 /-- A map out of the free product corresponds to a family of maps out of the summands. This is the
 universal property of the free product, charaterizing it as a categorical coproduct. -/
 @[simps symm_apply]
-def lift : (∀ i, M i →* N) ≃ (FreeProduct M →* N)
+def Monoid.CoprodI.lift : (∀ i, M i →* N) ≃ (Monoid.CoprodI M →* N)
     where
   toFun fi :=
     Con.lift _ (FreeMonoid.lift fun p : Σ i, M i => fi p.fst p.snd) <|
@@ -155,91 +157,98 @@ def lift : (∀ i, M i →* N) ≃ (FreeProduct M →* N)
               FreeMonoid.lift _ (FreeMonoid.of _ * FreeMonoid.of _) =
                 FreeMonoid.lift _ (FreeMonoid.of _)
             simp only [MonoidHom.map_mul, FreeMonoid.lift_eval_of])
-  invFun f i := f.comp of
+  invFun f i := f.comp Monoid.CoprodI.of
   left_inv := by
     intro fi; ext i x
     rw [MonoidHom.comp_apply, of_apply, Con.lift_mk', FreeMonoid.lift_eval_of]
   right_inv := by
     intro f; ext i x
     simp only [MonoidHom.comp_apply, of_apply, Con.lift_mk', FreeMonoid.lift_eval_of]
-#align free_product.lift FreeProduct.lift
+#align free_product.lift Monoid.CoprodI.lift
 -/
 
-#print FreeProduct.lift_of /-
+#print Monoid.CoprodI.lift_of /-
 @[simp]
-theorem lift_of {N} [Monoid N] (fi : ∀ i, M i →* N) {i} (m : M i) : lift fi (of m) = fi i m := by
+theorem Monoid.CoprodI.lift_of {N} [Monoid N] (fi : ∀ i, M i →* N) {i} (m : M i) :
+    Monoid.CoprodI.lift fi (Monoid.CoprodI.of m) = fi i m := by
   conv_rhs => rw [← lift.symm_apply_apply fi, lift_symm_apply, MonoidHom.comp_apply]
-#align free_product.lift_of FreeProduct.lift_of
+#align free_product.lift_of Monoid.CoprodI.lift_of
 -/
 
-#print FreeProduct.induction_on /-
+#print Monoid.CoprodI.induction_on /-
 @[elab_as_elim]
-theorem induction_on {C : FreeProduct M → Prop} (m : FreeProduct M) (h_one : C 1)
-    (h_of : ∀ (i) (m : M i), C (of m)) (h_mul : ∀ x y, C x → C y → C (x * y)) : C m :=
+theorem Monoid.CoprodI.induction_on {C : Monoid.CoprodI M → Prop} (m : Monoid.CoprodI M)
+    (h_one : C 1) (h_of : ∀ (i) (m : M i), C (Monoid.CoprodI.of m))
+    (h_mul : ∀ x y, C x → C y → C (x * y)) : C m :=
   by
-  let S : Submonoid (FreeProduct M) := Submonoid.mk (setOf C) h_mul h_one
+  let S : Submonoid (Monoid.CoprodI M) := Submonoid.mk (setOf C) h_mul h_one
   convert Subtype.prop (lift (fun i => of.cod_restrict S (h_of i)) m)
   change MonoidHom.id _ m = S.subtype.comp _ m
   congr
   ext
   simp [MonoidHom.codRestrict]
-#align free_product.induction_on FreeProduct.induction_on
+#align free_product.induction_on Monoid.CoprodI.induction_on
 -/
 
-#print FreeProduct.of_leftInverse /-
-theorem of_leftInverse [DecidableEq ι] (i : ι) :
-    Function.LeftInverse (lift <| Pi.mulSingle i (MonoidHom.id (M i))) of := fun x => by
-  simp only [lift_of, Pi.mulSingle_eq_same, MonoidHom.id_apply]
-#align free_product.of_left_inverse FreeProduct.of_leftInverse
+#print Monoid.CoprodI.of_leftInverse /-
+theorem Monoid.CoprodI.of_leftInverse [DecidableEq ι] (i : ι) :
+    Function.LeftInverse (Monoid.CoprodI.lift <| Pi.mulSingle i (MonoidHom.id (M i)))
+      Monoid.CoprodI.of :=
+  fun x => by simp only [lift_of, Pi.mulSingle_eq_same, MonoidHom.id_apply]
+#align free_product.of_left_inverse Monoid.CoprodI.of_leftInverse
 -/
 
-#print FreeProduct.of_injective /-
-theorem of_injective (i : ι) : Function.Injective ⇑(of : M i →* _) := by
-  classical exact (of_left_inverse i).Injective
-#align free_product.of_injective FreeProduct.of_injective
+#print Monoid.CoprodI.of_injective /-
+theorem Monoid.CoprodI.of_injective (i : ι) : Function.Injective ⇑(Monoid.CoprodI.of : M i →* _) :=
+  by classical exact (of_left_inverse i).Injective
+#align free_product.of_injective Monoid.CoprodI.of_injective
 -/
 
-#print FreeProduct.lift_mrange_le /-
-theorem lift_mrange_le {N} [Monoid N] (f : ∀ i, M i →* N) {s : Submonoid N}
-    (h : ∀ i, (f i).mrange ≤ s) : (lift f).mrange ≤ s :=
+#print Monoid.CoprodI.lift_mrange_le /-
+theorem Monoid.CoprodI.lift_mrange_le {N} [Monoid N] (f : ∀ i, M i →* N) {s : Submonoid N}
+    (h : ∀ i, (f i).mrange ≤ s) : (Monoid.CoprodI.lift f).mrange ≤ s :=
   by
   rintro _ ⟨x, rfl⟩
-  induction' x using FreeProduct.induction_on with i x x y hx hy
+  induction' x using Monoid.CoprodI.induction_on with i x x y hx hy
   · exact s.one_mem
   · simp only [lift_of, SetLike.mem_coe]; exact h i (Set.mem_range_self x)
   · simp only [map_mul, SetLike.mem_coe]; exact s.mul_mem hx hy
-#align free_product.lift_mrange_le FreeProduct.lift_mrange_le
+#align free_product.lift_mrange_le Monoid.CoprodI.lift_mrange_le
 -/
 
-#print FreeProduct.mrange_eq_iSup /-
-theorem mrange_eq_iSup {N} [Monoid N] (f : ∀ i, M i →* N) : (lift f).mrange = ⨆ i, (f i).mrange :=
+#print Monoid.CoprodI.mrange_eq_iSup /-
+theorem Monoid.CoprodI.mrange_eq_iSup {N} [Monoid N] (f : ∀ i, M i →* N) :
+    (Monoid.CoprodI.lift f).mrange = ⨆ i, (f i).mrange :=
   by
   apply le_antisymm (lift_mrange_le f fun i => le_iSup _ i)
   apply iSup_le _
   rintro i _ ⟨x, rfl⟩
   exact ⟨of x, by simp only [lift_of]⟩
-#align free_product.mrange_eq_supr FreeProduct.mrange_eq_iSup
+#align free_product.mrange_eq_supr Monoid.CoprodI.mrange_eq_iSup
 -/
 
 section Group
 
 variable (G : ι → Type _) [∀ i, Group (G i)]
 
-instance : Inv (FreeProduct G)
+instance : Inv (Monoid.CoprodI G)
     where inv :=
-    MulOpposite.unop ∘ lift fun i => (of : G i →* _).op.comp (MulEquiv.inv' (G i)).toMonoidHom
+    MulOpposite.unop ∘
+      Monoid.CoprodI.lift fun i =>
+        (Monoid.CoprodI.of : G i →* _).op.comp (MulEquiv.inv' (G i)).toMonoidHom
 
-#print FreeProduct.inv_def /-
-theorem inv_def (x : FreeProduct G) :
+#print Monoid.CoprodI.inv_def /-
+theorem Monoid.CoprodI.inv_def (x : Monoid.CoprodI G) :
     x⁻¹ =
       MulOpposite.unop
-        (lift (fun i => (of : G i →* _).op.comp (MulEquiv.inv' (G i)).toMonoidHom) x) :=
+        (Monoid.CoprodI.lift
+          (fun i => (Monoid.CoprodI.of : G i →* _).op.comp (MulEquiv.inv' (G i)).toMonoidHom) x) :=
   rfl
-#align free_product.inv_def FreeProduct.inv_def
+#align free_product.inv_def Monoid.CoprodI.inv_def
 -/
 
-instance : Group (FreeProduct G) :=
-  { FreeProduct.hasInv G, FreeProduct.monoid G with
+instance : Group (Monoid.CoprodI G) :=
+  { Monoid.CoprodI.hasInv G, Monoid.CoprodI.monoid G with
     mul_left_inv := by
       intro m
       rw [inv_def]
@@ -250,106 +259,109 @@ instance : Group (FreeProduct G) :=
         rw [MonoidHom.map_mul, MulOpposite.unop_mul, mul_assoc, ← mul_assoc _ x y, hx, one_mul,
           hy] }
 
-#print FreeProduct.lift_range_le /-
-theorem lift_range_le {N} [Group N] (f : ∀ i, G i →* N) {s : Subgroup N}
-    (h : ∀ i, (f i).range ≤ s) : (lift f).range ≤ s :=
+#print Monoid.CoprodI.lift_range_le /-
+theorem Monoid.CoprodI.lift_range_le {N} [Group N] (f : ∀ i, G i →* N) {s : Subgroup N}
+    (h : ∀ i, (f i).range ≤ s) : (Monoid.CoprodI.lift f).range ≤ s :=
   by
   rintro _ ⟨x, rfl⟩
-  induction' x using FreeProduct.induction_on with i x x y hx hy
+  induction' x using Monoid.CoprodI.induction_on with i x x y hx hy
   · exact s.one_mem
   · simp only [lift_of, SetLike.mem_coe]; exact h i (Set.mem_range_self x)
   · simp only [map_mul, SetLike.mem_coe]; exact s.mul_mem hx hy
-#align free_product.lift_range_le FreeProduct.lift_range_le
+#align free_product.lift_range_le Monoid.CoprodI.lift_range_le
 -/
 
-#print FreeProduct.range_eq_iSup /-
-theorem range_eq_iSup {N} [Group N] (f : ∀ i, G i →* N) : (lift f).range = ⨆ i, (f i).range :=
+#print Monoid.CoprodI.range_eq_iSup /-
+theorem Monoid.CoprodI.range_eq_iSup {N} [Group N] (f : ∀ i, G i →* N) :
+    (Monoid.CoprodI.lift f).range = ⨆ i, (f i).range :=
   by
   apply le_antisymm (lift_range_le _ f fun i => le_iSup _ i)
   apply iSup_le _
   rintro i _ ⟨x, rfl⟩
   exact ⟨of x, by simp only [lift_of]⟩
-#align free_product.range_eq_supr FreeProduct.range_eq_iSup
+#align free_product.range_eq_supr Monoid.CoprodI.range_eq_iSup
 -/
 
 end Group
 
 namespace Word
 
-#print FreeProduct.Word.empty /-
+#print Monoid.CoprodI.Word.empty /-
 /-- The empty reduced word. -/
-def empty : Word M where
+def Monoid.CoprodI.Word.empty : Monoid.CoprodI.Word M
+    where
   toList := []
   ne_one _ := False.elim
   chain_ne := List.chain'_nil
-#align free_product.word.empty FreeProduct.Word.empty
+#align free_product.word.empty Monoid.CoprodI.Word.empty
 -/
 
-instance : Inhabited (Word M) :=
-  ⟨empty⟩
+instance : Inhabited (Monoid.CoprodI.Word M) :=
+  ⟨Monoid.CoprodI.Word.empty⟩
 
-#print FreeProduct.Word.prod /-
+#print Monoid.CoprodI.Word.prod /-
 /-- A reduced word determines an element of the free product, given by multiplication. -/
-def prod (w : Word M) : FreeProduct M :=
-  List.prod (w.toList.map fun l => of l.snd)
-#align free_product.word.prod FreeProduct.Word.prod
+def Monoid.CoprodI.Word.prod (w : Monoid.CoprodI.Word M) : Monoid.CoprodI M :=
+  List.prod (w.toList.map fun l => Monoid.CoprodI.of l.snd)
+#align free_product.word.prod Monoid.CoprodI.Word.prod
 -/
 
-#print FreeProduct.Word.prod_empty /-
+#print Monoid.CoprodI.Word.prod_empty /-
 @[simp]
-theorem prod_empty : prod (empty : Word M) = 1 :=
+theorem Monoid.CoprodI.Word.prod_empty :
+    Monoid.CoprodI.Word.prod (Monoid.CoprodI.Word.empty : Monoid.CoprodI.Word M) = 1 :=
   rfl
-#align free_product.word.prod_empty FreeProduct.Word.prod_empty
+#align free_product.word.prod_empty Monoid.CoprodI.Word.prod_empty
 -/
 
-#print FreeProduct.Word.fstIdx /-
+#print Monoid.CoprodI.Word.fstIdx /-
 /-- `fst_idx w` is `some i` if the first letter of `w` is `⟨i, m⟩` with `m : M i`. If `w` is empty
 then it's `none`. -/
-def fstIdx (w : Word M) : Option ι :=
+def Monoid.CoprodI.Word.fstIdx (w : Monoid.CoprodI.Word M) : Option ι :=
   w.toList.head?.map Sigma.fst
-#align free_product.word.fst_idx FreeProduct.Word.fstIdx
+#align free_product.word.fst_idx Monoid.CoprodI.Word.fstIdx
 -/
 
-#print FreeProduct.Word.fstIdx_ne_iff /-
-theorem fstIdx_ne_iff {w : Word M} {i} :
-    fstIdx w ≠ some i ↔ ∀ l ∈ w.toList.head?, i ≠ Sigma.fst l :=
+#print Monoid.CoprodI.Word.fstIdx_ne_iff /-
+theorem Monoid.CoprodI.Word.fstIdx_ne_iff {w : Monoid.CoprodI.Word M} {i} :
+    Monoid.CoprodI.Word.fstIdx w ≠ some i ↔ ∀ l ∈ w.toList.head?, i ≠ Sigma.fst l :=
   not_iff_not.mp <| by simp [fst_idx]
-#align free_product.word.fst_idx_ne_iff FreeProduct.Word.fstIdx_ne_iff
+#align free_product.word.fst_idx_ne_iff Monoid.CoprodI.Word.fstIdx_ne_iff
 -/
 
 variable (M)
 
-#print FreeProduct.Word.Pair /-
+#print Monoid.CoprodI.Word.Pair /-
 /-- Given an index `i : ι`, `pair M i` is the type of pairs `(head, tail)` where `head : M i` and
 `tail : word M`, subject to the constraint that first letter of `tail` can't be `⟨i, m⟩`.
 By prepending `head` to `tail`, one obtains a new word. We'll show that any word can be uniquely
 obtained in this way. -/
 @[ext]
-structure Pair (i : ι) where
+structure Monoid.CoprodI.Word.Pair (i : ι) where
   headI : M i
-  tail : Word M
-  fstIdx_ne : fstIdx tail ≠ some i
-#align free_product.word.pair FreeProduct.Word.Pair
+  tail : Monoid.CoprodI.Word M
+  fstIdx_ne : Monoid.CoprodI.Word.fstIdx tail ≠ some i
+#align free_product.word.pair Monoid.CoprodI.Word.Pair
 -/
 
-instance (i : ι) : Inhabited (Pair M i) :=
-  ⟨⟨1, empty, by tauto⟩⟩
+instance (i : ι) : Inhabited (Monoid.CoprodI.Word.Pair M i) :=
+  ⟨⟨1, Monoid.CoprodI.Word.empty, by tauto⟩⟩
 
 variable {M}
 
 variable [∀ i, DecidableEq (M i)]
 
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-#print FreeProduct.Word.rcons /-
+#print Monoid.CoprodI.Word.rcons /-
 /-- Given a pair `(head, tail)`, we can form a word by prepending `head` to `tail`, except if `head`
 is `1 : M i` then we have to just return `word` since we need the result to be reduced. -/
-def rcons {i} (p : Pair M i) : Word M :=
+def Monoid.CoprodI.Word.rcons {i} (p : Monoid.CoprodI.Word.Pair M i) : Monoid.CoprodI.Word M :=
   if h : p.headI = 1 then p.tail
   else
     { toList := ⟨i, p.headI⟩::p.tail.toList
       ne_one := by rintro l (rfl | hl); exact h; exact p.tail.ne_one l hl
-      chain_ne := p.tail.chain_ne.cons' (fstIdx_ne_iff.mp p.fstIdx_ne) }
-#align free_product.word.rcons FreeProduct.Word.rcons
+      chain_ne := p.tail.chain_ne.cons' (Monoid.CoprodI.Word.fstIdx_ne_iff.mp p.fstIdx_ne) }
+#align free_product.word.rcons Monoid.CoprodI.Word.rcons
 -/
 
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@@ -357,27 +369,33 @@ def rcons {i} (p : Pair M i) : Word M :=
 /-- Given a word of the form `⟨l :: ls, h1, h2⟩`, we can form a word of the form `⟨ls, _, _⟩`,
 dropping the first letter. -/
 private def mk_aux {l} (ls : List (Σ i, M i)) (h1 : ∀ l' ∈ l::ls, Sigma.snd l' ≠ 1)
-    (h2 : (l::ls).Chain' _) : Word M :=
+    (h2 : (l::ls).Chain' _) : Monoid.CoprodI.Word M :=
   ⟨ls, fun l' hl => h1 _ (List.mem_cons_of_mem _ hl), h2.tail⟩
 
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-#print FreeProduct.Word.cons_eq_rcons /-
-theorem cons_eq_rcons {i} {m : M i} {ls h1 h2} :
-    Word.mk (⟨i, m⟩::ls) h1 h2 = rcons ⟨m, mkAux ls h1 h2, fstIdx_ne_iff.mpr h2.rel_head?⟩ := by
-  rw [rcons, dif_neg]; rfl; exact h1 ⟨i, m⟩ (ls.mem_cons_self _)
-#align free_product.word.cons_eq_rcons FreeProduct.Word.cons_eq_rcons
+#print Monoid.CoprodI.Word.cons_eq_rcons /-
+theorem Monoid.CoprodI.Word.cons_eq_rcons {i} {m : M i} {ls h1 h2} :
+    Monoid.CoprodI.Word.mk (⟨i, m⟩::ls) h1 h2 =
+      Monoid.CoprodI.Word.rcons
+        ⟨m, mkAux ls h1 h2, Monoid.CoprodI.Word.fstIdx_ne_iff.mpr h2.rel_head?⟩ :=
+  by rw [rcons, dif_neg]; rfl; exact h1 ⟨i, m⟩ (ls.mem_cons_self _)
+#align free_product.word.cons_eq_rcons Monoid.CoprodI.Word.cons_eq_rcons
 -/
 
-#print FreeProduct.Word.prod_rcons /-
+#print Monoid.CoprodI.Word.prod_rcons /-
 @[simp]
-theorem prod_rcons {i} (p : Pair M i) : prod (rcons p) = of p.headI * prod p.tail :=
+theorem Monoid.CoprodI.Word.prod_rcons {i} (p : Monoid.CoprodI.Word.Pair M i) :
+    Monoid.CoprodI.Word.prod (Monoid.CoprodI.Word.rcons p) =
+      Monoid.CoprodI.of p.headI * Monoid.CoprodI.Word.prod p.tail :=
   if hm : p.headI = 1 then by rw [rcons, dif_pos hm, hm, MonoidHom.map_one, one_mul]
   else by rw [rcons, dif_neg hm, Prod, List.map_cons, List.prod_cons, Prod]
-#align free_product.word.prod_rcons FreeProduct.Word.prod_rcons
+#align free_product.word.prod_rcons Monoid.CoprodI.Word.prod_rcons
 -/
 
-#print FreeProduct.Word.rcons_inj /-
-theorem rcons_inj {i} : Function.Injective (rcons : Pair M i → Word M) :=
+#print Monoid.CoprodI.Word.rcons_inj /-
+theorem Monoid.CoprodI.Word.rcons_inj {i} :
+    Function.Injective
+      (Monoid.CoprodI.Word.rcons : Monoid.CoprodI.Word.Pair M i → Monoid.CoprodI.Word M) :=
   by
   rintro ⟨m, w, h⟩ ⟨m', w', h'⟩ he
   by_cases hm : m = 1 <;> by_cases hm' : m' = 1
@@ -389,7 +407,7 @@ theorem rcons_inj {i} : Function.Injective (rcons : Pair M i → Word M) :=
         heq_iff_eq, ← Subtype.ext_iff_val] using he
     rcases this with ⟨rfl, h⟩
     congr; exact word.ext _ _ h
-#align free_product.word.rcons_inj FreeProduct.Word.rcons_inj
+#align free_product.word.rcons_inj Monoid.CoprodI.Word.rcons_inj
 -/
 
 variable [DecidableEq ι]
@@ -398,7 +416,9 @@ variable [DecidableEq ι]
 -- This definition is computable but not very nice to look at. Thankfully we don't have to inspect
 -- it, since `rcons` is known to be injective.
 /-- Given `i : ι`, any reduced word can be decomposed into a pair `p` such that `w = rcons p`. -/
-private def equiv_pair_aux (i) : ∀ w : Word M, { p : Pair M i // rcons p = w }
+private def equiv_pair_aux (i) :
+    ∀ w : Monoid.CoprodI.Word M,
+      { p : Monoid.CoprodI.Word.Pair M i // Monoid.CoprodI.Word.rcons p = w }
   | w@⟨[], _, _⟩ => ⟨⟨1, w, by rintro ⟨⟩⟩, dif_pos rfl⟩
   | w@⟨⟨j, m⟩::ls, h1, h2⟩ =>
     if ij : i = j then
@@ -409,74 +429,84 @@ private def equiv_pair_aux (i) : ∀ w : Word M, { p : Pair M i // rcons p = w }
         property := by cases ij <;> exact cons_eq_rcons.symm }
     else ⟨⟨1, w, (Option.some_injective _).Ne (Ne.symm ij)⟩, dif_pos rfl⟩
 
-#print FreeProduct.Word.equivPair /-
+#print Monoid.CoprodI.Word.equivPair /-
 /-- The equivalence between words and pairs. Given a word, it decomposes it as a pair by removing
 the first letter if it comes from `M i`. Given a pair, it prepends the head to the tail. -/
-def equivPair (i) : Word M ≃ Pair M i
+def Monoid.CoprodI.Word.equivPair (i) : Monoid.CoprodI.Word M ≃ Monoid.CoprodI.Word.Pair M i
     where
   toFun w := (equivPairAux i w).val
-  invFun := rcons
+  invFun := Monoid.CoprodI.Word.rcons
   left_inv w := (equivPairAux i w).property
-  right_inv p := rcons_inj (equivPairAux i _).property
-#align free_product.word.equiv_pair FreeProduct.Word.equivPair
+  right_inv p := Monoid.CoprodI.Word.rcons_inj (equivPairAux i _).property
+#align free_product.word.equiv_pair Monoid.CoprodI.Word.equivPair
 -/
 
-#print FreeProduct.Word.equivPair_symm /-
-theorem equivPair_symm (i) (p : Pair M i) : (equivPair i).symm p = rcons p :=
+#print Monoid.CoprodI.Word.equivPair_symm /-
+theorem Monoid.CoprodI.Word.equivPair_symm (i) (p : Monoid.CoprodI.Word.Pair M i) :
+    (Monoid.CoprodI.Word.equivPair i).symm p = Monoid.CoprodI.Word.rcons p :=
   rfl
-#align free_product.word.equiv_pair_symm FreeProduct.Word.equivPair_symm
+#align free_product.word.equiv_pair_symm Monoid.CoprodI.Word.equivPair_symm
 -/
 
-#print FreeProduct.Word.equivPair_eq_of_fstIdx_ne /-
-theorem equivPair_eq_of_fstIdx_ne {i} {w : Word M} (h : fstIdx w ≠ some i) :
-    equivPair i w = ⟨1, w, h⟩ :=
-  (equivPair i).apply_eq_iff_eq_symm_apply.mpr <| Eq.symm (dif_pos rfl)
-#align free_product.word.equiv_pair_eq_of_fst_idx_ne FreeProduct.Word.equivPair_eq_of_fstIdx_ne
+#print Monoid.CoprodI.Word.equivPair_eq_of_fstIdx_ne /-
+theorem Monoid.CoprodI.Word.equivPair_eq_of_fstIdx_ne {i} {w : Monoid.CoprodI.Word M}
+    (h : Monoid.CoprodI.Word.fstIdx w ≠ some i) : Monoid.CoprodI.Word.equivPair i w = ⟨1, w, h⟩ :=
+  (Monoid.CoprodI.Word.equivPair i).apply_eq_iff_eq_symm_apply.mpr <| Eq.symm (dif_pos rfl)
+#align free_product.word.equiv_pair_eq_of_fst_idx_ne Monoid.CoprodI.Word.equivPair_eq_of_fstIdx_ne
 -/
 
-#print FreeProduct.Word.summandAction /-
-instance summandAction (i) : MulAction (M i) (Word M)
+#print Monoid.CoprodI.Word.summandAction /-
+instance Monoid.CoprodI.Word.summandAction (i) : MulAction (M i) (Monoid.CoprodI.Word M)
     where
-  smul m w := rcons { equivPair i w with headI := m * (equivPair i w).headI }
+  smul m w :=
+    Monoid.CoprodI.Word.rcons
+      { Monoid.CoprodI.Word.equivPair i w with
+        headI := m * (Monoid.CoprodI.Word.equivPair i w).headI }
   one_smul w := by simp_rw [one_mul]; apply (equiv_pair i).symm_apply_eq.mpr; ext <;> rfl
   mul_smul m m' w := by simp only [mul_assoc, ← equiv_pair_symm, Equiv.apply_symm_apply]
-#align free_product.word.summand_action FreeProduct.Word.summandAction
+#align free_product.word.summand_action Monoid.CoprodI.Word.summandAction
 -/
 
-instance : MulAction (FreeProduct M) (Word M) :=
-  MulAction.ofEndHom (lift fun i => MulAction.toEndHom)
+instance : MulAction (Monoid.CoprodI M) (Monoid.CoprodI.Word M) :=
+  MulAction.ofEndHom (Monoid.CoprodI.lift fun i => MulAction.toEndHom)
 
-#print FreeProduct.Word.of_smul_def /-
-theorem of_smul_def (i) (w : Word M) (m : M i) :
-    of m • w = rcons { equivPair i w with headI := m * (equivPair i w).headI } :=
+#print Monoid.CoprodI.Word.of_smul_def /-
+theorem Monoid.CoprodI.Word.of_smul_def (i) (w : Monoid.CoprodI.Word M) (m : M i) :
+    Monoid.CoprodI.of m • w =
+      Monoid.CoprodI.Word.rcons
+        { Monoid.CoprodI.Word.equivPair i w with
+          headI := m * (Monoid.CoprodI.Word.equivPair i w).headI } :=
   rfl
-#align free_product.word.of_smul_def FreeProduct.Word.of_smul_def
+#align free_product.word.of_smul_def Monoid.CoprodI.Word.of_smul_def
 -/
 
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-#print FreeProduct.Word.cons_eq_smul /-
-theorem cons_eq_smul {i} {m : M i} {ls h1 h2} :
-    Word.mk (⟨i, m⟩::ls) h1 h2 = of m • mkAux ls h1 h2 := by
+#print Monoid.CoprodI.Word.cons_eq_smul /-
+theorem Monoid.CoprodI.Word.cons_eq_smul {i} {m : M i} {ls h1 h2} :
+    Monoid.CoprodI.Word.mk (⟨i, m⟩::ls) h1 h2 = Monoid.CoprodI.of m • mkAux ls h1 h2 := by
   rw [cons_eq_rcons, of_smul_def, equiv_pair_eq_of_fst_idx_ne _] <;> simp only [mul_one]
-#align free_product.word.cons_eq_smul FreeProduct.Word.cons_eq_smul
+#align free_product.word.cons_eq_smul Monoid.CoprodI.Word.cons_eq_smul
 -/
 
-#print FreeProduct.Word.smul_induction /-
-theorem smul_induction {C : Word M → Prop} (h_empty : C empty)
-    (h_smul : ∀ (i) (m : M i) (w), C w → C (of m • w)) (w : Word M) : C w :=
-  by
+#print Monoid.CoprodI.Word.smul_induction /-
+theorem Monoid.CoprodI.Word.smul_induction {C : Monoid.CoprodI.Word M → Prop}
+    (h_empty : C Monoid.CoprodI.Word.empty)
+    (h_smul : ∀ (i) (m : M i) (w), C w → C (Monoid.CoprodI.of m • w)) (w : Monoid.CoprodI.Word M) :
+    C w := by
   cases' w with ls h1 h2
   induction' ls with l ls ih
   · exact h_empty
   cases' l with i m
   rw [cons_eq_smul]
   exact h_smul _ _ _ (ih _ _)
-#align free_product.word.smul_induction FreeProduct.Word.smul_induction
+#align free_product.word.smul_induction Monoid.CoprodI.Word.smul_induction
 -/
 
-#print FreeProduct.Word.prod_smul /-
+#print Monoid.CoprodI.Word.prod_smul /-
 @[simp]
-theorem prod_smul (m) : ∀ w : Word M, prod (m • w) = m * prod w :=
+theorem Monoid.CoprodI.Word.prod_smul (m) :
+    ∀ w : Monoid.CoprodI.Word M,
+      Monoid.CoprodI.Word.prod (m • w) = m * Monoid.CoprodI.Word.prod w :=
   by
   apply m.induction_on
   · intro; rw [one_smul, one_mul]
@@ -484,41 +514,42 @@ theorem prod_smul (m) : ∀ w : Word M, prod (m • w) = m * prod w :=
     rw [of_smul_def, prod_rcons, of.map_mul, mul_assoc, ← prod_rcons, ← equiv_pair_symm,
       Equiv.symm_apply_apply]
   · intro x y hx hy w; rw [mul_smul, hx, hy, mul_assoc]
-#align free_product.word.prod_smul FreeProduct.Word.prod_smul
+#align free_product.word.prod_smul Monoid.CoprodI.Word.prod_smul
 -/
 
-#print FreeProduct.Word.equiv /-
+#print Monoid.CoprodI.Word.equiv /-
 /-- Each element of the free product corresponds to a unique reduced word. -/
-def equiv : FreeProduct M ≃ Word M where
-  toFun m := m • empty
-  invFun w := prod w
+def Monoid.CoprodI.Word.equiv : Monoid.CoprodI M ≃ Monoid.CoprodI.Word M
+    where
+  toFun m := m • Monoid.CoprodI.Word.empty
+  invFun w := Monoid.CoprodI.Word.prod w
   left_inv m := by dsimp only <;> rw [prod_smul, prod_empty, mul_one]
   right_inv := by
     apply smul_induction
     · dsimp only; rw [prod_empty, one_smul]
     · dsimp only; intro i m w ih; rw [prod_smul, mul_smul, ih]
-#align free_product.word.equiv FreeProduct.Word.equiv
+#align free_product.word.equiv Monoid.CoprodI.Word.equiv
 -/
 
-instance : DecidableEq (Word M) :=
-  Function.Injective.decidableEq Word.ext
+instance : DecidableEq (Monoid.CoprodI.Word M) :=
+  Function.Injective.decidableEq Monoid.CoprodI.Word.ext
 
-instance : DecidableEq (FreeProduct M) :=
-  Word.equiv.DecidableEq
+instance : DecidableEq (Monoid.CoprodI M) :=
+  Monoid.CoprodI.Word.equiv.DecidableEq
 
 end Word
 
 variable (M)
 
-#print FreeProduct.NeWord /-
+#print Monoid.CoprodI.NeWord /-
 /-- A `neword M i j` is a representation of a non-empty reduced words where the first letter comes
 from `M i` and the last letter comes from `M j`. It can be constructed from singletons and via
 concatentation, and thus provides a useful induction principle. -/
 @[nolint has_nonempty_instance]
-inductive NeWord : ι → ι → Type max u_1 u_2
+inductive Monoid.CoprodI.NeWord : ι → ι → Type max u_1 u_2
   | singleton : ∀ {i} (x : M i) (hne1 : x ≠ 1), neword i i
   | append : ∀ {i j k l} (w₁ : neword i j) (hne : j ≠ k) (w₂ : neword k l), neword i l
-#align free_product.neword FreeProduct.NeWord
+#align free_product.neword Monoid.CoprodI.NeWord
 -/
 
 variable {M}
@@ -527,64 +558,67 @@ namespace Neword
 
 open Word
 
-#print FreeProduct.NeWord.toList /-
+#print Monoid.CoprodI.NeWord.toList /-
 /-- The list represented by a given `neword` -/
 @[simp]
-def toList : ∀ {i j} (w : NeWord M i j), List (Σ i, M i)
+def Monoid.CoprodI.NeWord.toList : ∀ {i j} (w : Monoid.CoprodI.NeWord M i j), List (Σ i, M i)
   | i, _, singleton x hne1 => [⟨i, x⟩]
   | _, _, append w₁ hne w₂ => w₁.toList ++ w₂.toList
-#align free_product.neword.to_list FreeProduct.NeWord.toList
+#align free_product.neword.to_list Monoid.CoprodI.NeWord.toList
 -/
 
-#print FreeProduct.NeWord.toList_ne_nil /-
-theorem toList_ne_nil {i j} (w : NeWord M i j) : w.toList ≠ List.nil := by induction w;
-  · rintro ⟨rfl⟩; · apply List.append_ne_nil_of_ne_nil_left; assumption
-#align free_product.neword.to_list_ne_nil FreeProduct.NeWord.toList_ne_nil
+#print Monoid.CoprodI.NeWord.toList_ne_nil /-
+theorem Monoid.CoprodI.NeWord.toList_ne_nil {i j} (w : Monoid.CoprodI.NeWord M i j) :
+    w.toList ≠ List.nil := by induction w; · rintro ⟨rfl⟩;
+  · apply List.append_ne_nil_of_ne_nil_left; assumption
+#align free_product.neword.to_list_ne_nil Monoid.CoprodI.NeWord.toList_ne_nil
 -/
 
-#print FreeProduct.NeWord.head /-
+#print Monoid.CoprodI.NeWord.head /-
 /-- The first letter of a `neword` -/
 @[simp]
-def head : ∀ {i j} (w : NeWord M i j), M i
+def Monoid.CoprodI.NeWord.head : ∀ {i j} (w : Monoid.CoprodI.NeWord M i j), M i
   | i, _, singleton x hne1 => x
   | _, _, append w₁ hne w₂ => w₁.headI
-#align free_product.neword.head FreeProduct.NeWord.head
+#align free_product.neword.head Monoid.CoprodI.NeWord.head
 -/
 
-#print FreeProduct.NeWord.last /-
+#print Monoid.CoprodI.NeWord.last /-
 /-- The last letter of a `neword` -/
 @[simp]
-def last : ∀ {i j} (w : NeWord M i j), M j
+def Monoid.CoprodI.NeWord.last : ∀ {i j} (w : Monoid.CoprodI.NeWord M i j), M j
   | i, _, singleton x hne1 => x
   | _, _, append w₁ hne w₂ => w₂.getLast
-#align free_product.neword.last FreeProduct.NeWord.last
+#align free_product.neword.last Monoid.CoprodI.NeWord.last
 -/
 
-#print FreeProduct.NeWord.toList_head? /-
+#print Monoid.CoprodI.NeWord.toList_head? /-
 @[simp]
-theorem toList_head? {i j} (w : NeWord M i j) : w.toList.head? = Option.some ⟨i, w.headI⟩ :=
+theorem Monoid.CoprodI.NeWord.toList_head? {i j} (w : Monoid.CoprodI.NeWord M i j) :
+    w.toList.head? = Option.some ⟨i, w.headI⟩ :=
   by
   rw [← Option.mem_def]
   induction w
   · rw [Option.mem_def]; rfl
   · exact List.head?_append w_ih_w₁
-#align free_product.neword.to_list_head' FreeProduct.NeWord.toList_head?
+#align free_product.neword.to_list_head' Monoid.CoprodI.NeWord.toList_head?
 -/
 
-#print FreeProduct.NeWord.toList_getLast? /-
+#print Monoid.CoprodI.NeWord.toList_getLast? /-
 @[simp]
-theorem toList_getLast? {i j} (w : NeWord M i j) : w.toList.getLast? = Option.some ⟨j, w.getLast⟩ :=
+theorem Monoid.CoprodI.NeWord.toList_getLast? {i j} (w : Monoid.CoprodI.NeWord M i j) :
+    w.toList.getLast? = Option.some ⟨j, w.getLast⟩ :=
   by
   rw [← Option.mem_def]
   induction w
   · rw [Option.mem_def]; rfl
   · exact List.getLast?_append w_ih_w₂
-#align free_product.neword.to_list_last' FreeProduct.NeWord.toList_getLast?
+#align free_product.neword.to_list_last' Monoid.CoprodI.NeWord.toList_getLast?
 -/
 
-#print FreeProduct.NeWord.toWord /-
+#print Monoid.CoprodI.NeWord.toWord /-
 /-- The `word M` represented by a `neword M i j` -/
-def toWord {i j} (w : NeWord M i j) : Word M
+def Monoid.CoprodI.NeWord.toWord {i j} (w : Monoid.CoprodI.NeWord M i j) : Monoid.CoprodI.Word M
     where
   toList := w.toList
   ne_one := by
@@ -606,13 +640,14 @@ def toWord {i j} (w : NeWord M i j) : Word M
       rw [w_w₂.to_list_head', Option.mem_some_iff] at hy 
       subst hx; subst hy
       exact w_hne
-#align free_product.neword.to_word FreeProduct.NeWord.toWord
+#align free_product.neword.to_word Monoid.CoprodI.NeWord.toWord
 -/
 
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-#print FreeProduct.NeWord.of_word /-
+#print Monoid.CoprodI.NeWord.of_word /-
 /-- Every nonempty `word M` can be constructed as a `neword M i j` -/
-theorem of_word (w : Word M) (h : w ≠ Empty) : ∃ (i j : _) (w' : NeWord M i j), w'.toWord = w :=
+theorem Monoid.CoprodI.NeWord.of_word (w : Monoid.CoprodI.Word M) (h : w ≠ Empty) :
+    ∃ (i j : _) (w' : Monoid.CoprodI.NeWord M i j), w'.toWord = w :=
   by
   rsuffices ⟨i, j, w, h⟩ : ∃ (i j : _) (w' : neword M i j), w'.to_word.to_list = w.to_list
   · refine' ⟨i, j, w, _⟩; ext; rw [h]
@@ -629,95 +664,108 @@ theorem of_word (w : Word M) (h : w ≠ Empty) : ∃ (i j : _) (w' : NeWord M i
       obtain rfl : y = ⟨i, w'.head⟩ := by simpa [hw'] using w'.to_list_head'
       refine' ⟨x.1, j, append (singleton x.2 hnot1.1) hchain.1 w', _⟩
       · simpa [to_word] using hw'
-#align free_product.neword.of_word FreeProduct.NeWord.of_word
+#align free_product.neword.of_word Monoid.CoprodI.NeWord.of_word
 -/
 
-#print FreeProduct.NeWord.prod /-
+#print Monoid.CoprodI.NeWord.prod /-
 /-- A non-empty reduced word determines an element of the free product, given by multiplication. -/
-def prod {i j} (w : NeWord M i j) :=
+def Monoid.CoprodI.NeWord.prod {i j} (w : Monoid.CoprodI.NeWord M i j) :=
   w.toWord.Prod
-#align free_product.neword.prod FreeProduct.NeWord.prod
+#align free_product.neword.prod Monoid.CoprodI.NeWord.prod
 -/
 
-#print FreeProduct.NeWord.singleton_head /-
+#print Monoid.CoprodI.NeWord.singleton_head /-
 @[simp]
-theorem singleton_head {i} (x : M i) (hne_one : x ≠ 1) : (singleton x hne_one).headI = x :=
+theorem Monoid.CoprodI.NeWord.singleton_head {i} (x : M i) (hne_one : x ≠ 1) :
+    (Monoid.CoprodI.NeWord.singleton x hne_one).headI = x :=
   rfl
-#align free_product.neword.singleton_head FreeProduct.NeWord.singleton_head
+#align free_product.neword.singleton_head Monoid.CoprodI.NeWord.singleton_head
 -/
 
-#print FreeProduct.NeWord.singleton_last /-
+#print Monoid.CoprodI.NeWord.singleton_last /-
 @[simp]
-theorem singleton_last {i} (x : M i) (hne_one : x ≠ 1) : (singleton x hne_one).getLast = x :=
+theorem Monoid.CoprodI.NeWord.singleton_last {i} (x : M i) (hne_one : x ≠ 1) :
+    (Monoid.CoprodI.NeWord.singleton x hne_one).getLast = x :=
   rfl
-#align free_product.neword.singleton_last FreeProduct.NeWord.singleton_last
+#align free_product.neword.singleton_last Monoid.CoprodI.NeWord.singleton_last
 -/
 
-#print FreeProduct.NeWord.prod_singleton /-
+#print Monoid.CoprodI.NeWord.prod_singleton /-
 @[simp]
-theorem prod_singleton {i} (x : M i) (hne_one : x ≠ 1) : (singleton x hne_one).Prod = of x := by
+theorem Monoid.CoprodI.NeWord.prod_singleton {i} (x : M i) (hne_one : x ≠ 1) :
+    (Monoid.CoprodI.NeWord.singleton x hne_one).Prod = Monoid.CoprodI.of x := by
   simp [to_word, Prod, word.prod]
-#align free_product.neword.prod_singleton FreeProduct.NeWord.prod_singleton
+#align free_product.neword.prod_singleton Monoid.CoprodI.NeWord.prod_singleton
 -/
 
-#print FreeProduct.NeWord.append_head /-
+#print Monoid.CoprodI.NeWord.append_head /-
 @[simp]
-theorem append_head {i j k l} {w₁ : NeWord M i j} {hne : j ≠ k} {w₂ : NeWord M k l} :
-    (append w₁ hne w₂).headI = w₁.headI :=
+theorem Monoid.CoprodI.NeWord.append_head {i j k l} {w₁ : Monoid.CoprodI.NeWord M i j} {hne : j ≠ k}
+    {w₂ : Monoid.CoprodI.NeWord M k l} :
+    (Monoid.CoprodI.NeWord.append w₁ hne w₂).headI = w₁.headI :=
   rfl
-#align free_product.neword.append_head FreeProduct.NeWord.append_head
+#align free_product.neword.append_head Monoid.CoprodI.NeWord.append_head
 -/
 
-#print FreeProduct.NeWord.append_last /-
+#print Monoid.CoprodI.NeWord.append_last /-
 @[simp]
-theorem append_last {i j k l} {w₁ : NeWord M i j} {hne : j ≠ k} {w₂ : NeWord M k l} :
-    (append w₁ hne w₂).getLast = w₂.getLast :=
+theorem Monoid.CoprodI.NeWord.append_last {i j k l} {w₁ : Monoid.CoprodI.NeWord M i j} {hne : j ≠ k}
+    {w₂ : Monoid.CoprodI.NeWord M k l} :
+    (Monoid.CoprodI.NeWord.append w₁ hne w₂).getLast = w₂.getLast :=
   rfl
-#align free_product.neword.append_last FreeProduct.NeWord.append_last
+#align free_product.neword.append_last Monoid.CoprodI.NeWord.append_last
 -/
 
-#print FreeProduct.NeWord.append_prod /-
+#print Monoid.CoprodI.NeWord.append_prod /-
 @[simp]
-theorem append_prod {i j k l} {w₁ : NeWord M i j} {hne : j ≠ k} {w₂ : NeWord M k l} :
-    (append w₁ hne w₂).Prod = w₁.Prod * w₂.Prod := by simp [to_word, Prod, word.prod]
-#align free_product.neword.append_prod FreeProduct.NeWord.append_prod
+theorem Monoid.CoprodI.NeWord.append_prod {i j k l} {w₁ : Monoid.CoprodI.NeWord M i j} {hne : j ≠ k}
+    {w₂ : Monoid.CoprodI.NeWord M k l} :
+    (Monoid.CoprodI.NeWord.append w₁ hne w₂).Prod = w₁.Prod * w₂.Prod := by
+  simp [to_word, Prod, word.prod]
+#align free_product.neword.append_prod Monoid.CoprodI.NeWord.append_prod
 -/
 
-#print FreeProduct.NeWord.replaceHead /-
+#print Monoid.CoprodI.NeWord.replaceHead /-
 /-- One can replace the first letter in a non-empty reduced word by an element of the same
 group -/
-def replaceHead : ∀ {i j : ι} (x : M i) (hnotone : x ≠ 1) (w : NeWord M i j), NeWord M i j
-  | _, _, x, h, singleton _ _ => singleton x h
-  | _, _, x, h, append w₁ hne w₂ => append (replace_head x h w₁) hne w₂
-#align free_product.neword.replace_head FreeProduct.NeWord.replaceHead
+def Monoid.CoprodI.NeWord.replaceHead :
+    ∀ {i j : ι} (x : M i) (hnotone : x ≠ 1) (w : Monoid.CoprodI.NeWord M i j),
+      Monoid.CoprodI.NeWord M i j
+  | _, _, x, h, singleton _ _ => Monoid.CoprodI.NeWord.singleton x h
+  | _, _, x, h, append w₁ hne w₂ => Monoid.CoprodI.NeWord.append (replace_head x h w₁) hne w₂
+#align free_product.neword.replace_head Monoid.CoprodI.NeWord.replaceHead
 -/
 
-#print FreeProduct.NeWord.replaceHead_head /-
+#print Monoid.CoprodI.NeWord.replaceHead_head /-
 @[simp]
-theorem replaceHead_head {i j : ι} (x : M i) (hnotone : x ≠ 1) (w : NeWord M i j) :
-    (replaceHead x hnotone w).headI = x := by induction w; rfl; exact w_ih_w₁ _ _
-#align free_product.neword.replace_head_head FreeProduct.NeWord.replaceHead_head
+theorem Monoid.CoprodI.NeWord.replaceHead_head {i j : ι} (x : M i) (hnotone : x ≠ 1)
+    (w : Monoid.CoprodI.NeWord M i j) : (Monoid.CoprodI.NeWord.replaceHead x hnotone w).headI = x :=
+  by induction w; rfl; exact w_ih_w₁ _ _
+#align free_product.neword.replace_head_head Monoid.CoprodI.NeWord.replaceHead_head
 -/
 
-#print FreeProduct.NeWord.mulHead /-
+#print Monoid.CoprodI.NeWord.mulHead /-
 /-- One can multiply an element from the left to a non-empty reduced word if it does not cancel
 with the first element in the word. -/
-def mulHead {i j : ι} (w : NeWord M i j) (x : M i) (hnotone : x * w.headI ≠ 1) : NeWord M i j :=
-  replaceHead (x * w.headI) hnotone w
-#align free_product.neword.mul_head FreeProduct.NeWord.mulHead
+def Monoid.CoprodI.NeWord.mulHead {i j : ι} (w : Monoid.CoprodI.NeWord M i j) (x : M i)
+    (hnotone : x * w.headI ≠ 1) : Monoid.CoprodI.NeWord M i j :=
+  Monoid.CoprodI.NeWord.replaceHead (x * w.headI) hnotone w
+#align free_product.neword.mul_head Monoid.CoprodI.NeWord.mulHead
 -/
 
-#print FreeProduct.NeWord.mulHead_head /-
+#print Monoid.CoprodI.NeWord.mulHead_head /-
 @[simp]
-theorem mulHead_head {i j : ι} (w : NeWord M i j) (x : M i) (hnotone : x * w.headI ≠ 1) :
-    (mulHead w x hnotone).headI = x * w.headI := by induction w; rfl; exact w_ih_w₁ _ _
-#align free_product.neword.mul_head_head FreeProduct.NeWord.mulHead_head
+theorem Monoid.CoprodI.NeWord.mulHead_head {i j : ι} (w : Monoid.CoprodI.NeWord M i j) (x : M i)
+    (hnotone : x * w.headI ≠ 1) : (Monoid.CoprodI.NeWord.mulHead w x hnotone).headI = x * w.headI :=
+  by induction w; rfl; exact w_ih_w₁ _ _
+#align free_product.neword.mul_head_head Monoid.CoprodI.NeWord.mulHead_head
 -/
 
-#print FreeProduct.NeWord.mulHead_prod /-
+#print Monoid.CoprodI.NeWord.mulHead_prod /-
 @[simp]
-theorem mulHead_prod {i j : ι} (w : NeWord M i j) (x : M i) (hnotone : x * w.headI ≠ 1) :
-    (mulHead w x hnotone).Prod = of x * w.Prod :=
+theorem Monoid.CoprodI.NeWord.mulHead_prod {i j : ι} (w : Monoid.CoprodI.NeWord M i j) (x : M i)
+    (hnotone : x * w.headI ≠ 1) :
+    (Monoid.CoprodI.NeWord.mulHead w x hnotone).Prod = Monoid.CoprodI.of x * w.Prod :=
   by
   unfold mul_head
   induction w
@@ -725,40 +773,41 @@ theorem mulHead_prod {i j : ι} (w : NeWord M i j) (x : M i) (hnotone : x * w.he
   · specialize w_ih_w₁ _ hnotone; clear w_ih_w₂
     simp [replace_head, ← mul_assoc] at *
     congr 1
-#align free_product.neword.mul_head_prod FreeProduct.NeWord.mulHead_prod
+#align free_product.neword.mul_head_prod Monoid.CoprodI.NeWord.mulHead_prod
 -/
 
 section Group
 
 variable {G : ι → Type _} [∀ i, Group (G i)]
 
-#print FreeProduct.NeWord.inv /-
+#print Monoid.CoprodI.NeWord.inv /-
 /-- The inverse of a non-empty reduced word -/
-def inv : ∀ {i j} (w : NeWord G i j), NeWord G j i
-  | _, _, singleton x h => singleton x⁻¹ (mt inv_eq_one.mp h)
-  | _, _, append w₁ h w₂ => append w₂.inv h.symm w₁.inv
-#align free_product.neword.inv FreeProduct.NeWord.inv
+def Monoid.CoprodI.NeWord.inv :
+    ∀ {i j} (w : Monoid.CoprodI.NeWord G i j), Monoid.CoprodI.NeWord G j i
+  | _, _, singleton x h => Monoid.CoprodI.NeWord.singleton x⁻¹ (mt inv_eq_one.mp h)
+  | _, _, append w₁ h w₂ => Monoid.CoprodI.NeWord.append w₂.inv h.symm w₁.inv
+#align free_product.neword.inv Monoid.CoprodI.NeWord.inv
 -/
 
-#print FreeProduct.NeWord.inv_prod /-
+#print Monoid.CoprodI.NeWord.inv_prod /-
 @[simp]
-theorem inv_prod {i j} (w : NeWord G i j) : w.inv.Prod = w.Prod⁻¹ := by
-  induction w <;> simp [inv, *]
-#align free_product.neword.inv_prod FreeProduct.NeWord.inv_prod
+theorem Monoid.CoprodI.NeWord.inv_prod {i j} (w : Monoid.CoprodI.NeWord G i j) :
+    w.inv.Prod = w.Prod⁻¹ := by induction w <;> simp [inv, *]
+#align free_product.neword.inv_prod Monoid.CoprodI.NeWord.inv_prod
 -/
 
-#print FreeProduct.NeWord.inv_head /-
+#print Monoid.CoprodI.NeWord.inv_head /-
 @[simp]
-theorem inv_head {i j} (w : NeWord G i j) : w.inv.headI = w.getLast⁻¹ := by
-  induction w <;> simp [inv, *]
-#align free_product.neword.inv_head FreeProduct.NeWord.inv_head
+theorem Monoid.CoprodI.NeWord.inv_head {i j} (w : Monoid.CoprodI.NeWord G i j) :
+    w.inv.headI = w.getLast⁻¹ := by induction w <;> simp [inv, *]
+#align free_product.neword.inv_head Monoid.CoprodI.NeWord.inv_head
 -/
 
-#print FreeProduct.NeWord.inv_last /-
+#print Monoid.CoprodI.NeWord.inv_last /-
 @[simp]
-theorem inv_last {i j} (w : NeWord G i j) : w.inv.getLast = w.headI⁻¹ := by
-  induction w <;> simp [inv, *]
-#align free_product.neword.inv_last FreeProduct.NeWord.inv_last
+theorem Monoid.CoprodI.NeWord.inv_last {i j} (w : Monoid.CoprodI.NeWord G i j) :
+    w.inv.getLast = w.headI⁻¹ := by induction w <;> simp [inv, *]
+#align free_product.neword.inv_last Monoid.CoprodI.NeWord.inv_last
 -/
 
 end Group
@@ -793,8 +842,9 @@ variable (hXdisj : Pairwise fun i j => Disjoint (X i) (X j))
 
 variable (hpp : Pairwise fun i j => ∀ h : H i, h ≠ 1 → f i h • X j ⊆ X i)
 
-#print FreeProduct.lift_word_ping_pong /-
-theorem lift_word_ping_pong {i j k} (w : NeWord H i j) (hk : j ≠ k) : lift f w.Prod • X k ⊆ X i :=
+#print Monoid.CoprodI.lift_word_ping_pong /-
+theorem Monoid.CoprodI.lift_word_ping_pong {i j k} (w : Monoid.CoprodI.NeWord H i j) (hk : j ≠ k) :
+    Monoid.CoprodI.lift f w.Prod • X k ⊆ X i :=
   by
   rename' i => i', j => j', k => m, hk => hm
   induction' w with i x hne_one i j k l w₁ hne w₂ hIw₁ hIw₂ generalizing m <;> clear i' j'
@@ -805,30 +855,33 @@ theorem lift_word_ping_pong {i j k} (w : NeWord H i j) (hk : j ≠ k) : lift f w
         simp [MulAction.mul_smul]
       _ ⊆ lift f w₁.prod • X k := (set_smul_subset_set_smul_iff.mpr (hIw₂ hm))
       _ ⊆ X i := hIw₁ hne
-#align free_product.lift_word_ping_pong FreeProduct.lift_word_ping_pong
+#align free_product.lift_word_ping_pong Monoid.CoprodI.lift_word_ping_pong
 -/
 
-#print FreeProduct.lift_word_prod_nontrivial_of_other_i /-
-theorem lift_word_prod_nontrivial_of_other_i {i j k} (w : NeWord H i j) (hhead : k ≠ i)
-    (hlast : k ≠ j) : lift f w.Prod ≠ 1 := by
+#print Monoid.CoprodI.lift_word_prod_nontrivial_of_other_i /-
+theorem Monoid.CoprodI.lift_word_prod_nontrivial_of_other_i {i j k}
+    (w : Monoid.CoprodI.NeWord H i j) (hhead : k ≠ i) (hlast : k ≠ j) :
+    Monoid.CoprodI.lift f w.Prod ≠ 1 := by
   intro heq1
   have : X k ⊆ X i := by simpa [heq1] using lift_word_ping_pong f X hpp w hlast.symm
   obtain ⟨x, hx⟩ := hXnonempty k
   exact (hXdisj hhead).le_bot ⟨hx, this hx⟩
-#align free_product.lift_word_prod_nontrivial_of_other_i FreeProduct.lift_word_prod_nontrivial_of_other_i
+#align free_product.lift_word_prod_nontrivial_of_other_i Monoid.CoprodI.lift_word_prod_nontrivial_of_other_i
 -/
 
-#print FreeProduct.lift_word_prod_nontrivial_of_head_eq_last /-
-theorem lift_word_prod_nontrivial_of_head_eq_last {i} (w : NeWord H i i) : lift f w.Prod ≠ 1 :=
+#print Monoid.CoprodI.lift_word_prod_nontrivial_of_head_eq_last /-
+theorem Monoid.CoprodI.lift_word_prod_nontrivial_of_head_eq_last {i}
+    (w : Monoid.CoprodI.NeWord H i i) : Monoid.CoprodI.lift f w.Prod ≠ 1 :=
   by
   obtain ⟨k, hk⟩ := exists_ne i
   exact lift_word_prod_nontrivial_of_other_i f X hXnonempty hXdisj hpp w hk hk
-#align free_product.lift_word_prod_nontrivial_of_head_eq_last FreeProduct.lift_word_prod_nontrivial_of_head_eq_last
+#align free_product.lift_word_prod_nontrivial_of_head_eq_last Monoid.CoprodI.lift_word_prod_nontrivial_of_head_eq_last
 -/
 
-#print FreeProduct.lift_word_prod_nontrivial_of_head_card /-
-theorem lift_word_prod_nontrivial_of_head_card {i j} (w : NeWord H i j) (hcard : 3 ≤ (#H i))
-    (hheadtail : i ≠ j) : lift f w.Prod ≠ 1 :=
+#print Monoid.CoprodI.lift_word_prod_nontrivial_of_head_card /-
+theorem Monoid.CoprodI.lift_word_prod_nontrivial_of_head_card {i j}
+    (w : Monoid.CoprodI.NeWord H i j) (hcard : 3 ≤ (#H i)) (hheadtail : i ≠ j) :
+    Monoid.CoprodI.lift f w.Prod ≠ 1 :=
   by
   obtain ⟨h, hn1, hnh⟩ := Cardinal.three_le hcard 1 w.head⁻¹
   have hnot1 : h * w.head ≠ 1 := by rw [← div_inv_eq_mul]; exact div_ne_one_of_ne hnh
@@ -838,11 +891,12 @@ theorem lift_word_prod_nontrivial_of_head_card {i j} (w : NeWord H i j) (hcard :
   have hw' : lift f w'.prod ≠ 1 :=
     lift_word_prod_nontrivial_of_head_eq_last f X hXnonempty hXdisj hpp w'
   intro heq1; apply hw'; simp [w', heq1]
-#align free_product.lift_word_prod_nontrivial_of_head_card FreeProduct.lift_word_prod_nontrivial_of_head_card
+#align free_product.lift_word_prod_nontrivial_of_head_card Monoid.CoprodI.lift_word_prod_nontrivial_of_head_card
 -/
 
-#print FreeProduct.lift_word_prod_nontrivial_of_not_empty /-
-theorem lift_word_prod_nontrivial_of_not_empty {i j} (w : NeWord H i j) : lift f w.Prod ≠ 1 := by
+#print Monoid.CoprodI.lift_word_prod_nontrivial_of_not_empty /-
+theorem Monoid.CoprodI.lift_word_prod_nontrivial_of_not_empty {i j}
+    (w : Monoid.CoprodI.NeWord H i j) : Monoid.CoprodI.lift f w.Prod ≠ 1 := by
   classical
   cases hcard
   · obtain ⟨i, h1, h2⟩ := Cardinal.three_le hcard i j
@@ -868,19 +922,20 @@ theorem lift_word_prod_nontrivial_of_not_empty {i j} (w : NeWord H i j) : lift f
       have hw' : lift f w'.prod ≠ 1 :=
         lift_word_prod_nontrivial_of_head_eq_last f X hXnonempty hXdisj hpp w'
       intro heq1; apply hw'; simp [w', heq1]
-#align free_product.lift_word_prod_nontrivial_of_not_empty FreeProduct.lift_word_prod_nontrivial_of_not_empty
+#align free_product.lift_word_prod_nontrivial_of_not_empty Monoid.CoprodI.lift_word_prod_nontrivial_of_not_empty
 -/
 
-#print FreeProduct.empty_of_word_prod_eq_one /-
-theorem empty_of_word_prod_eq_one {w : Word H} (h : lift f w.Prod = 1) : w = Word.empty :=
+#print Monoid.CoprodI.empty_of_word_prod_eq_one /-
+theorem Monoid.CoprodI.empty_of_word_prod_eq_one {w : Monoid.CoprodI.Word H}
+    (h : Monoid.CoprodI.lift f w.Prod = 1) : w = Monoid.CoprodI.Word.empty :=
   by
   by_contra hnotempty
   obtain ⟨i, j, w, rfl⟩ := neword.of_word w hnotempty
   exact lift_word_prod_nontrivial_of_not_empty f hcard X hXnonempty hXdisj hpp w h
-#align free_product.empty_of_word_prod_eq_one FreeProduct.empty_of_word_prod_eq_one
+#align free_product.empty_of_word_prod_eq_one Monoid.CoprodI.empty_of_word_prod_eq_one
 -/
 
-#print FreeProduct.lift_injective_of_ping_pong /-
+#print Monoid.CoprodI.lift_injective_of_ping_pong /-
 /-- The Ping-Pong-Lemma.
 
 Given a group action of `G` on `X` so that the `H i` acts in a specific way on disjoint subsets
@@ -894,15 +949,16 @@ generated by the images.
 Usually the Ping-Pong-Lemma requires that one group `H i` has at least three elements. This
 condition is only needed if `# ι = 2`, and we accept `3 ≤ # ι` as an alternative.
 -/
-theorem lift_injective_of_ping_pong : Function.Injective (lift f) := by
+theorem Monoid.CoprodI.lift_injective_of_ping_pong : Function.Injective (Monoid.CoprodI.lift f) :=
+  by
   classical
   apply (injective_iff_map_eq_one (lift f)).mpr
-  rw [(FreeProduct.Word.equiv : _ ≃ word H).forall_congr_left']
+  rw [(Monoid.CoprodI.Word.equiv : _ ≃ word H).forall_congr_left']
   · intro w Heq
     dsimp [word.equiv] at *
     · rw [empty_of_word_prod_eq_one f hcard X hXnonempty hXdisj hpp Heq]
       rfl
-#align free_product.lift_injective_of_ping_pong FreeProduct.lift_injective_of_ping_pong
+#align free_product.lift_injective_of_ping_pong Monoid.CoprodI.lift_injective_of_ping_pong
 -/
 
 end PingPongLemma
@@ -910,33 +966,33 @@ end PingPongLemma
 /-- The free product of free groups is itself a free group -/
 @[simps]
 instance {ι : Type _} (G : ι → Type _) [∀ i, Group (G i)] [hG : ∀ i, IsFreeGroup (G i)] :
-    IsFreeGroup (FreeProduct G)
+    IsFreeGroup (Monoid.CoprodI G)
     where
   Generators := Σ i, IsFreeGroup.Generators (G i)
   MulEquiv :=
     MonoidHom.toMulEquiv
       (FreeGroup.lift fun x : Σ i, IsFreeGroup.Generators (G i) =>
-        FreeProduct.of (IsFreeGroup.of x.2 : G x.1))
-      (FreeProduct.lift fun i : ι =>
+        Monoid.CoprodI.of (IsFreeGroup.of x.2 : G x.1))
+      (Monoid.CoprodI.lift fun i : ι =>
         (IsFreeGroup.lift fun x : IsFreeGroup.Generators (G i) =>
             FreeGroup.of (⟨i, x⟩ : Σ i, IsFreeGroup.Generators (G i)) :
           G i →* FreeGroup (Σ i, IsFreeGroup.Generators (G i))))
       (by ext; simp) (by ext; simp)
 
-#print freeGroupEquivFreeProduct /-
+#print freeGroupEquivCoprodI /-
 -- NB: One might expect this theorem to be phrased with ℤ, but ℤ is an additive group,
 -- and using `multiplicative ℤ` runs into diamond issues.
 /-- A free group is a free product of copies of the free_group over one generator. -/
 @[simps]
-def freeGroupEquivFreeProduct {ι : Type u_1} :
-    FreeGroup ι ≃* FreeProduct fun _ : ι => FreeGroup Unit :=
+def freeGroupEquivCoprodI {ι : Type u_1} :
+    FreeGroup ι ≃* Monoid.CoprodI fun _ : ι => FreeGroup Unit :=
   by
   refine' MonoidHom.toMulEquiv _ _ _ _
-  exact FreeGroup.lift fun i => @FreeProduct.of ι _ _ i (FreeGroup.of Unit.unit)
-  exact FreeProduct.lift fun i => FreeGroup.lift fun pstar => FreeGroup.of i
+  exact FreeGroup.lift fun i => @Monoid.CoprodI.of ι _ _ i (FreeGroup.of Unit.unit)
+  exact Monoid.CoprodI.lift fun i => FreeGroup.lift fun pstar => FreeGroup.of i
   · ext i; rfl
   · ext i a; cases a; rfl
-#align free_group_equiv_free_product freeGroupEquivFreeProduct
+#align free_group_equiv_free_product freeGroupEquivCoprodI
 -/
 
 section PingPongLemma
@@ -980,8 +1036,8 @@ theorem FreeGroup.injective_lift_of_ping_pong : Function.Injective (FreeGroup.li
   -- Step one: express the free group lift via the free product lift
   have :
     FreeGroup.lift a =
-      (FreeProduct.lift fun i => FreeGroup.lift fun _ => a i).comp
-        (@freeGroupEquivFreeProduct ι).toMonoidHom :=
+      (Monoid.CoprodI.lift fun i => FreeGroup.lift fun _ => a i).comp
+        (@freeGroupEquivCoprodI ι).toMonoidHom :=
     by ext i; simp
   rw [this]; clear this
   refine' Function.Injective.comp _ (MulEquiv.injective _)
@@ -1056,5 +1112,5 @@ theorem FreeGroup.injective_lift_of_ping_pong : Function.Injective (FreeGroup.li
 
 end PingPongLemma
 
-end FreeProduct
+end Monoid.CoprodI
 
Diff
@@ -2,11 +2,6 @@
 Copyright (c) 2021 David Wärn. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: David Wärn, Joachim Breitner
-
-! This file was ported from Lean 3 source module group_theory.free_product
-! leanprover-community/mathlib commit cb3ceec8485239a61ed51d944cb9a95b68c6bafc
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.Algebra.FreeMonoid.Basic
 import Mathbin.GroupTheory.Congruence
@@ -15,6 +10,8 @@ import Mathbin.Data.List.Chain
 import Mathbin.SetTheory.Cardinal.Ordinal
 import Mathbin.Data.Set.Pointwise.Smul
 
+#align_import group_theory.free_product from "leanprover-community/mathlib"@"cb3ceec8485239a61ed51d944cb9a95b68c6bafc"
+
 /-!
 # The free product of groups or monoids
 
Diff
@@ -160,10 +160,10 @@ def lift : (∀ i, M i →* N) ≃ (FreeProduct M →* N)
             simp only [MonoidHom.map_mul, FreeMonoid.lift_eval_of])
   invFun f i := f.comp of
   left_inv := by
-    intro fi; ext (i x)
+    intro fi; ext i x
     rw [MonoidHom.comp_apply, of_apply, Con.lift_mk', FreeMonoid.lift_eval_of]
   right_inv := by
-    intro f; ext (i x)
+    intro f; ext i x
     simp only [MonoidHom.comp_apply, of_apply, Con.lift_mk', FreeMonoid.lift_eval_of]
 #align free_product.lift FreeProduct.lift
 -/
@@ -938,7 +938,7 @@ def freeGroupEquivFreeProduct {ι : Type u_1} :
   exact FreeGroup.lift fun i => @FreeProduct.of ι _ _ i (FreeGroup.of Unit.unit)
   exact FreeProduct.lift fun i => FreeGroup.lift fun pstar => FreeGroup.of i
   · ext i; rfl
-  · ext (i a); cases a; rfl
+  · ext i a; cases a; rfl
 #align free_group_equiv_free_product freeGroupEquivFreeProduct
 -/
 
Diff
@@ -111,6 +111,7 @@ structure Word where
 
 variable {M}
 
+#print FreeProduct.of /-
 /-- The inclusion of a summand into the free product. -/
 def of {i : ι} : M i →* FreeProduct M
     where
@@ -118,13 +119,17 @@ def of {i : ι} : M i →* FreeProduct M
   map_one' := (Con.eq _).mpr (ConGen.Rel.of _ _ (FreeProduct.Rel.of_one i))
   map_mul' x y := Eq.symm <| (Con.eq _).mpr (ConGen.Rel.of _ _ (FreeProduct.Rel.of_mul x y))
 #align free_product.of FreeProduct.of
+-/
 
+#print FreeProduct.of_apply /-
 theorem of_apply {i} (m : M i) : of m = Con.mk' _ (FreeMonoid.of <| Sigma.mk i m) :=
   rfl
 #align free_product.of_apply FreeProduct.of_apply
+-/
 
 variable {N : Type _} [Monoid N]
 
+#print FreeProduct.ext_hom /-
 /-- See note [partially-applied ext lemmas]. -/
 @[ext]
 theorem ext_hom (f g : FreeProduct M →* N) (h : ∀ i, f.comp (of : M i →* _) = g.comp of) : f = g :=
@@ -133,7 +138,9 @@ theorem ext_hom (f g : FreeProduct M →* N) (h : ∀ i, f.comp (of : M i →* _
       rw [MonoidHom.comp_apply, MonoidHom.comp_apply, ← of_apply, ← MonoidHom.comp_apply, ←
         MonoidHom.comp_apply, h]
 #align free_product.ext_hom FreeProduct.ext_hom
+-/
 
+#print FreeProduct.lift /-
 /-- A map out of the free product corresponds to a family of maps out of the summands. This is the
 universal property of the free product, charaterizing it as a categorical coproduct. -/
 @[simps symm_apply]
@@ -159,12 +166,16 @@ def lift : (∀ i, M i →* N) ≃ (FreeProduct M →* N)
     intro f; ext (i x)
     simp only [MonoidHom.comp_apply, of_apply, Con.lift_mk', FreeMonoid.lift_eval_of]
 #align free_product.lift FreeProduct.lift
+-/
 
+#print FreeProduct.lift_of /-
 @[simp]
 theorem lift_of {N} [Monoid N] (fi : ∀ i, M i →* N) {i} (m : M i) : lift fi (of m) = fi i m := by
   conv_rhs => rw [← lift.symm_apply_apply fi, lift_symm_apply, MonoidHom.comp_apply]
 #align free_product.lift_of FreeProduct.lift_of
+-/
 
+#print FreeProduct.induction_on /-
 @[elab_as_elim]
 theorem induction_on {C : FreeProduct M → Prop} (m : FreeProduct M) (h_one : C 1)
     (h_of : ∀ (i) (m : M i), C (of m)) (h_mul : ∀ x y, C x → C y → C (x * y)) : C m :=
@@ -176,16 +187,22 @@ theorem induction_on {C : FreeProduct M → Prop} (m : FreeProduct M) (h_one : C
   ext
   simp [MonoidHom.codRestrict]
 #align free_product.induction_on FreeProduct.induction_on
+-/
 
+#print FreeProduct.of_leftInverse /-
 theorem of_leftInverse [DecidableEq ι] (i : ι) :
     Function.LeftInverse (lift <| Pi.mulSingle i (MonoidHom.id (M i))) of := fun x => by
   simp only [lift_of, Pi.mulSingle_eq_same, MonoidHom.id_apply]
 #align free_product.of_left_inverse FreeProduct.of_leftInverse
+-/
 
+#print FreeProduct.of_injective /-
 theorem of_injective (i : ι) : Function.Injective ⇑(of : M i →* _) := by
   classical exact (of_left_inverse i).Injective
 #align free_product.of_injective FreeProduct.of_injective
+-/
 
+#print FreeProduct.lift_mrange_le /-
 theorem lift_mrange_le {N} [Monoid N] (f : ∀ i, M i →* N) {s : Submonoid N}
     (h : ∀ i, (f i).mrange ≤ s) : (lift f).mrange ≤ s :=
   by
@@ -195,6 +212,7 @@ theorem lift_mrange_le {N} [Monoid N] (f : ∀ i, M i →* N) {s : Submonoid N}
   · simp only [lift_of, SetLike.mem_coe]; exact h i (Set.mem_range_self x)
   · simp only [map_mul, SetLike.mem_coe]; exact s.mul_mem hx hy
 #align free_product.lift_mrange_le FreeProduct.lift_mrange_le
+-/
 
 #print FreeProduct.mrange_eq_iSup /-
 theorem mrange_eq_iSup {N} [Monoid N] (f : ∀ i, M i →* N) : (lift f).mrange = ⨆ i, (f i).mrange :=
@@ -214,12 +232,14 @@ instance : Inv (FreeProduct G)
     where inv :=
     MulOpposite.unop ∘ lift fun i => (of : G i →* _).op.comp (MulEquiv.inv' (G i)).toMonoidHom
 
+#print FreeProduct.inv_def /-
 theorem inv_def (x : FreeProduct G) :
     x⁻¹ =
       MulOpposite.unop
         (lift (fun i => (of : G i →* _).op.comp (MulEquiv.inv' (G i)).toMonoidHom) x) :=
   rfl
 #align free_product.inv_def FreeProduct.inv_def
+-/
 
 instance : Group (FreeProduct G) :=
   { FreeProduct.hasInv G, FreeProduct.monoid G with
@@ -233,6 +253,7 @@ instance : Group (FreeProduct G) :=
         rw [MonoidHom.map_mul, MulOpposite.unop_mul, mul_assoc, ← mul_assoc _ x y, hx, one_mul,
           hy] }
 
+#print FreeProduct.lift_range_le /-
 theorem lift_range_le {N} [Group N] (f : ∀ i, G i →* N) {s : Subgroup N}
     (h : ∀ i, (f i).range ≤ s) : (lift f).range ≤ s :=
   by
@@ -242,6 +263,7 @@ theorem lift_range_le {N} [Group N] (f : ∀ i, G i →* N) {s : Subgroup N}
   · simp only [lift_of, SetLike.mem_coe]; exact h i (Set.mem_range_self x)
   · simp only [map_mul, SetLike.mem_coe]; exact s.mul_mem hx hy
 #align free_product.lift_range_le FreeProduct.lift_range_le
+-/
 
 #print FreeProduct.range_eq_iSup /-
 theorem range_eq_iSup {N} [Group N] (f : ∀ i, G i →* N) : (lift f).range = ⨆ i, (f i).range :=
@@ -276,10 +298,12 @@ def prod (w : Word M) : FreeProduct M :=
 #align free_product.word.prod FreeProduct.Word.prod
 -/
 
+#print FreeProduct.Word.prod_empty /-
 @[simp]
 theorem prod_empty : prod (empty : Word M) = 1 :=
   rfl
 #align free_product.word.prod_empty FreeProduct.Word.prod_empty
+-/
 
 #print FreeProduct.Word.fstIdx /-
 /-- `fst_idx w` is `some i` if the first letter of `w` is `⟨i, m⟩` with `m : M i`. If `w` is empty
@@ -289,10 +313,12 @@ def fstIdx (w : Word M) : Option ι :=
 #align free_product.word.fst_idx FreeProduct.Word.fstIdx
 -/
 
+#print FreeProduct.Word.fstIdx_ne_iff /-
 theorem fstIdx_ne_iff {w : Word M} {i} :
     fstIdx w ≠ some i ↔ ∀ l ∈ w.toList.head?, i ≠ Sigma.fst l :=
   not_iff_not.mp <| by simp [fst_idx]
 #align free_product.word.fst_idx_ne_iff FreeProduct.Word.fstIdx_ne_iff
+-/
 
 variable (M)
 
@@ -338,17 +364,22 @@ private def mk_aux {l} (ls : List (Σ i, M i)) (h1 : ∀ l' ∈ l::ls, Sigma.snd
   ⟨ls, fun l' hl => h1 _ (List.mem_cons_of_mem _ hl), h2.tail⟩
 
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print FreeProduct.Word.cons_eq_rcons /-
 theorem cons_eq_rcons {i} {m : M i} {ls h1 h2} :
     Word.mk (⟨i, m⟩::ls) h1 h2 = rcons ⟨m, mkAux ls h1 h2, fstIdx_ne_iff.mpr h2.rel_head?⟩ := by
   rw [rcons, dif_neg]; rfl; exact h1 ⟨i, m⟩ (ls.mem_cons_self _)
 #align free_product.word.cons_eq_rcons FreeProduct.Word.cons_eq_rcons
+-/
 
+#print FreeProduct.Word.prod_rcons /-
 @[simp]
 theorem prod_rcons {i} (p : Pair M i) : prod (rcons p) = of p.headI * prod p.tail :=
   if hm : p.headI = 1 then by rw [rcons, dif_pos hm, hm, MonoidHom.map_one, one_mul]
   else by rw [rcons, dif_neg hm, Prod, List.map_cons, List.prod_cons, Prod]
 #align free_product.word.prod_rcons FreeProduct.Word.prod_rcons
+-/
 
+#print FreeProduct.Word.rcons_inj /-
 theorem rcons_inj {i} : Function.Injective (rcons : Pair M i → Word M) :=
   by
   rintro ⟨m, w, h⟩ ⟨m', w', h'⟩ he
@@ -362,6 +393,7 @@ theorem rcons_inj {i} : Function.Injective (rcons : Pair M i → Word M) :=
     rcases this with ⟨rfl, h⟩
     congr; exact word.ext _ _ h
 #align free_product.word.rcons_inj FreeProduct.Word.rcons_inj
+-/
 
 variable [DecidableEq ι]
 
@@ -392,14 +424,18 @@ def equivPair (i) : Word M ≃ Pair M i
 #align free_product.word.equiv_pair FreeProduct.Word.equivPair
 -/
 
+#print FreeProduct.Word.equivPair_symm /-
 theorem equivPair_symm (i) (p : Pair M i) : (equivPair i).symm p = rcons p :=
   rfl
 #align free_product.word.equiv_pair_symm FreeProduct.Word.equivPair_symm
+-/
 
+#print FreeProduct.Word.equivPair_eq_of_fstIdx_ne /-
 theorem equivPair_eq_of_fstIdx_ne {i} {w : Word M} (h : fstIdx w ≠ some i) :
     equivPair i w = ⟨1, w, h⟩ :=
   (equivPair i).apply_eq_iff_eq_symm_apply.mpr <| Eq.symm (dif_pos rfl)
 #align free_product.word.equiv_pair_eq_of_fst_idx_ne FreeProduct.Word.equivPair_eq_of_fstIdx_ne
+-/
 
 #print FreeProduct.Word.summandAction /-
 instance summandAction (i) : MulAction (M i) (Word M)
@@ -413,17 +449,22 @@ instance summandAction (i) : MulAction (M i) (Word M)
 instance : MulAction (FreeProduct M) (Word M) :=
   MulAction.ofEndHom (lift fun i => MulAction.toEndHom)
 
+#print FreeProduct.Word.of_smul_def /-
 theorem of_smul_def (i) (w : Word M) (m : M i) :
     of m • w = rcons { equivPair i w with headI := m * (equivPair i w).headI } :=
   rfl
 #align free_product.word.of_smul_def FreeProduct.Word.of_smul_def
+-/
 
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print FreeProduct.Word.cons_eq_smul /-
 theorem cons_eq_smul {i} {m : M i} {ls h1 h2} :
     Word.mk (⟨i, m⟩::ls) h1 h2 = of m • mkAux ls h1 h2 := by
   rw [cons_eq_rcons, of_smul_def, equiv_pair_eq_of_fst_idx_ne _] <;> simp only [mul_one]
 #align free_product.word.cons_eq_smul FreeProduct.Word.cons_eq_smul
+-/
 
+#print FreeProduct.Word.smul_induction /-
 theorem smul_induction {C : Word M → Prop} (h_empty : C empty)
     (h_smul : ∀ (i) (m : M i) (w), C w → C (of m • w)) (w : Word M) : C w :=
   by
@@ -434,7 +475,9 @@ theorem smul_induction {C : Word M → Prop} (h_empty : C empty)
   rw [cons_eq_smul]
   exact h_smul _ _ _ (ih _ _)
 #align free_product.word.smul_induction FreeProduct.Word.smul_induction
+-/
 
+#print FreeProduct.Word.prod_smul /-
 @[simp]
 theorem prod_smul (m) : ∀ w : Word M, prod (m • w) = m * prod w :=
   by
@@ -445,6 +488,7 @@ theorem prod_smul (m) : ∀ w : Word M, prod (m • w) = m * prod w :=
       Equiv.symm_apply_apply]
   · intro x y hx hy w; rw [mul_smul, hx, hy, mul_assoc]
 #align free_product.word.prod_smul FreeProduct.Word.prod_smul
+-/
 
 #print FreeProduct.Word.equiv /-
 /-- Each element of the free product corresponds to a unique reduced word. -/
@@ -495,9 +539,11 @@ def toList : ∀ {i j} (w : NeWord M i j), List (Σ i, M i)
 #align free_product.neword.to_list FreeProduct.NeWord.toList
 -/
 
+#print FreeProduct.NeWord.toList_ne_nil /-
 theorem toList_ne_nil {i j} (w : NeWord M i j) : w.toList ≠ List.nil := by induction w;
   · rintro ⟨rfl⟩; · apply List.append_ne_nil_of_ne_nil_left; assumption
 #align free_product.neword.to_list_ne_nil FreeProduct.NeWord.toList_ne_nil
+-/
 
 #print FreeProduct.NeWord.head /-
 /-- The first letter of a `neword` -/
@@ -517,6 +563,7 @@ def last : ∀ {i j} (w : NeWord M i j), M j
 #align free_product.neword.last FreeProduct.NeWord.last
 -/
 
+#print FreeProduct.NeWord.toList_head? /-
 @[simp]
 theorem toList_head? {i j} (w : NeWord M i j) : w.toList.head? = Option.some ⟨i, w.headI⟩ :=
   by
@@ -525,7 +572,9 @@ theorem toList_head? {i j} (w : NeWord M i j) : w.toList.head? = Option.some ⟨
   · rw [Option.mem_def]; rfl
   · exact List.head?_append w_ih_w₁
 #align free_product.neword.to_list_head' FreeProduct.NeWord.toList_head?
+-/
 
+#print FreeProduct.NeWord.toList_getLast? /-
 @[simp]
 theorem toList_getLast? {i j} (w : NeWord M i j) : w.toList.getLast? = Option.some ⟨j, w.getLast⟩ :=
   by
@@ -534,6 +583,7 @@ theorem toList_getLast? {i j} (w : NeWord M i j) : w.toList.getLast? = Option.so
   · rw [Option.mem_def]; rfl
   · exact List.getLast?_append w_ih_w₂
 #align free_product.neword.to_list_last' FreeProduct.NeWord.toList_getLast?
+-/
 
 #print FreeProduct.NeWord.toWord /-
 /-- The `word M` represented by a `neword M i j` -/
@@ -563,6 +613,7 @@ def toWord {i j} (w : NeWord M i j) : Word M
 -/
 
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print FreeProduct.NeWord.of_word /-
 /-- Every nonempty `word M` can be constructed as a `neword M i j` -/
 theorem of_word (w : Word M) (h : w ≠ Empty) : ∃ (i j : _) (w' : NeWord M i j), w'.toWord = w :=
   by
@@ -582,6 +633,7 @@ theorem of_word (w : Word M) (h : w ≠ Empty) : ∃ (i j : _) (w' : NeWord M i
       refine' ⟨x.1, j, append (singleton x.2 hnot1.1) hchain.1 w', _⟩
       · simpa [to_word] using hw'
 #align free_product.neword.of_word FreeProduct.NeWord.of_word
+-/
 
 #print FreeProduct.NeWord.prod /-
 /-- A non-empty reduced word determines an element of the free product, given by multiplication. -/
@@ -590,61 +642,82 @@ def prod {i j} (w : NeWord M i j) :=
 #align free_product.neword.prod FreeProduct.NeWord.prod
 -/
 
+#print FreeProduct.NeWord.singleton_head /-
 @[simp]
 theorem singleton_head {i} (x : M i) (hne_one : x ≠ 1) : (singleton x hne_one).headI = x :=
   rfl
 #align free_product.neword.singleton_head FreeProduct.NeWord.singleton_head
+-/
 
+#print FreeProduct.NeWord.singleton_last /-
 @[simp]
 theorem singleton_last {i} (x : M i) (hne_one : x ≠ 1) : (singleton x hne_one).getLast = x :=
   rfl
 #align free_product.neword.singleton_last FreeProduct.NeWord.singleton_last
+-/
 
+#print FreeProduct.NeWord.prod_singleton /-
 @[simp]
 theorem prod_singleton {i} (x : M i) (hne_one : x ≠ 1) : (singleton x hne_one).Prod = of x := by
   simp [to_word, Prod, word.prod]
 #align free_product.neword.prod_singleton FreeProduct.NeWord.prod_singleton
+-/
 
+#print FreeProduct.NeWord.append_head /-
 @[simp]
 theorem append_head {i j k l} {w₁ : NeWord M i j} {hne : j ≠ k} {w₂ : NeWord M k l} :
     (append w₁ hne w₂).headI = w₁.headI :=
   rfl
 #align free_product.neword.append_head FreeProduct.NeWord.append_head
+-/
 
+#print FreeProduct.NeWord.append_last /-
 @[simp]
 theorem append_last {i j k l} {w₁ : NeWord M i j} {hne : j ≠ k} {w₂ : NeWord M k l} :
     (append w₁ hne w₂).getLast = w₂.getLast :=
   rfl
 #align free_product.neword.append_last FreeProduct.NeWord.append_last
+-/
 
+#print FreeProduct.NeWord.append_prod /-
 @[simp]
 theorem append_prod {i j k l} {w₁ : NeWord M i j} {hne : j ≠ k} {w₂ : NeWord M k l} :
     (append w₁ hne w₂).Prod = w₁.Prod * w₂.Prod := by simp [to_word, Prod, word.prod]
 #align free_product.neword.append_prod FreeProduct.NeWord.append_prod
+-/
 
+#print FreeProduct.NeWord.replaceHead /-
 /-- One can replace the first letter in a non-empty reduced word by an element of the same
 group -/
 def replaceHead : ∀ {i j : ι} (x : M i) (hnotone : x ≠ 1) (w : NeWord M i j), NeWord M i j
   | _, _, x, h, singleton _ _ => singleton x h
   | _, _, x, h, append w₁ hne w₂ => append (replace_head x h w₁) hne w₂
 #align free_product.neword.replace_head FreeProduct.NeWord.replaceHead
+-/
 
+#print FreeProduct.NeWord.replaceHead_head /-
 @[simp]
 theorem replaceHead_head {i j : ι} (x : M i) (hnotone : x ≠ 1) (w : NeWord M i j) :
     (replaceHead x hnotone w).headI = x := by induction w; rfl; exact w_ih_w₁ _ _
 #align free_product.neword.replace_head_head FreeProduct.NeWord.replaceHead_head
+-/
 
+#print FreeProduct.NeWord.mulHead /-
 /-- One can multiply an element from the left to a non-empty reduced word if it does not cancel
 with the first element in the word. -/
 def mulHead {i j : ι} (w : NeWord M i j) (x : M i) (hnotone : x * w.headI ≠ 1) : NeWord M i j :=
   replaceHead (x * w.headI) hnotone w
 #align free_product.neword.mul_head FreeProduct.NeWord.mulHead
+-/
 
+#print FreeProduct.NeWord.mulHead_head /-
 @[simp]
 theorem mulHead_head {i j : ι} (w : NeWord M i j) (x : M i) (hnotone : x * w.headI ≠ 1) :
     (mulHead w x hnotone).headI = x * w.headI := by induction w; rfl; exact w_ih_w₁ _ _
 #align free_product.neword.mul_head_head FreeProduct.NeWord.mulHead_head
+-/
 
+#print FreeProduct.NeWord.mulHead_prod /-
 @[simp]
 theorem mulHead_prod {i j : ι} (w : NeWord M i j) (x : M i) (hnotone : x * w.headI ≠ 1) :
     (mulHead w x hnotone).Prod = of x * w.Prod :=
@@ -656,6 +729,7 @@ theorem mulHead_prod {i j : ι} (w : NeWord M i j) (x : M i) (hnotone : x * w.he
     simp [replace_head, ← mul_assoc] at *
     congr 1
 #align free_product.neword.mul_head_prod FreeProduct.NeWord.mulHead_prod
+-/
 
 section Group
 
@@ -669,20 +743,26 @@ def inv : ∀ {i j} (w : NeWord G i j), NeWord G j i
 #align free_product.neword.inv FreeProduct.NeWord.inv
 -/
 
+#print FreeProduct.NeWord.inv_prod /-
 @[simp]
 theorem inv_prod {i j} (w : NeWord G i j) : w.inv.Prod = w.Prod⁻¹ := by
   induction w <;> simp [inv, *]
 #align free_product.neword.inv_prod FreeProduct.NeWord.inv_prod
+-/
 
+#print FreeProduct.NeWord.inv_head /-
 @[simp]
 theorem inv_head {i j} (w : NeWord G i j) : w.inv.headI = w.getLast⁻¹ := by
   induction w <;> simp [inv, *]
 #align free_product.neword.inv_head FreeProduct.NeWord.inv_head
+-/
 
+#print FreeProduct.NeWord.inv_last /-
 @[simp]
 theorem inv_last {i j} (w : NeWord G i j) : w.inv.getLast = w.headI⁻¹ := by
   induction w <;> simp [inv, *]
 #align free_product.neword.inv_last FreeProduct.NeWord.inv_last
+-/
 
 end Group
 
@@ -716,8 +796,7 @@ variable (hXdisj : Pairwise fun i j => Disjoint (X i) (X j))
 
 variable (hpp : Pairwise fun i j => ∀ h : H i, h ≠ 1 → f i h • X j ⊆ X i)
 
-include hpp
-
+#print FreeProduct.lift_word_ping_pong /-
 theorem lift_word_ping_pong {i j k} (w : NeWord H i j) (hk : j ≠ k) : lift f w.Prod • X k ⊆ X i :=
   by
   rename' i => i', j => j', k => m, hk => hm
@@ -730,9 +809,9 @@ theorem lift_word_ping_pong {i j k} (w : NeWord H i j) (hk : j ≠ k) : lift f w
       _ ⊆ lift f w₁.prod • X k := (set_smul_subset_set_smul_iff.mpr (hIw₂ hm))
       _ ⊆ X i := hIw₁ hne
 #align free_product.lift_word_ping_pong FreeProduct.lift_word_ping_pong
+-/
 
-include X hXnonempty hXdisj
-
+#print FreeProduct.lift_word_prod_nontrivial_of_other_i /-
 theorem lift_word_prod_nontrivial_of_other_i {i j k} (w : NeWord H i j) (hhead : k ≠ i)
     (hlast : k ≠ j) : lift f w.Prod ≠ 1 := by
   intro heq1
@@ -740,15 +819,17 @@ theorem lift_word_prod_nontrivial_of_other_i {i j k} (w : NeWord H i j) (hhead :
   obtain ⟨x, hx⟩ := hXnonempty k
   exact (hXdisj hhead).le_bot ⟨hx, this hx⟩
 #align free_product.lift_word_prod_nontrivial_of_other_i FreeProduct.lift_word_prod_nontrivial_of_other_i
+-/
 
-include hnontriv
-
+#print FreeProduct.lift_word_prod_nontrivial_of_head_eq_last /-
 theorem lift_word_prod_nontrivial_of_head_eq_last {i} (w : NeWord H i i) : lift f w.Prod ≠ 1 :=
   by
   obtain ⟨k, hk⟩ := exists_ne i
   exact lift_word_prod_nontrivial_of_other_i f X hXnonempty hXdisj hpp w hk hk
 #align free_product.lift_word_prod_nontrivial_of_head_eq_last FreeProduct.lift_word_prod_nontrivial_of_head_eq_last
+-/
 
+#print FreeProduct.lift_word_prod_nontrivial_of_head_card /-
 theorem lift_word_prod_nontrivial_of_head_card {i j} (w : NeWord H i j) (hcard : 3 ≤ (#H i))
     (hheadtail : i ≠ j) : lift f w.Prod ≠ 1 :=
   by
@@ -761,9 +842,9 @@ theorem lift_word_prod_nontrivial_of_head_card {i j} (w : NeWord H i j) (hcard :
     lift_word_prod_nontrivial_of_head_eq_last f X hXnonempty hXdisj hpp w'
   intro heq1; apply hw'; simp [w', heq1]
 #align free_product.lift_word_prod_nontrivial_of_head_card FreeProduct.lift_word_prod_nontrivial_of_head_card
+-/
 
-include hcard
-
+#print FreeProduct.lift_word_prod_nontrivial_of_not_empty /-
 theorem lift_word_prod_nontrivial_of_not_empty {i j} (w : NeWord H i j) : lift f w.Prod ≠ 1 := by
   classical
   cases hcard
@@ -791,14 +872,18 @@ theorem lift_word_prod_nontrivial_of_not_empty {i j} (w : NeWord H i j) : lift f
         lift_word_prod_nontrivial_of_head_eq_last f X hXnonempty hXdisj hpp w'
       intro heq1; apply hw'; simp [w', heq1]
 #align free_product.lift_word_prod_nontrivial_of_not_empty FreeProduct.lift_word_prod_nontrivial_of_not_empty
+-/
 
+#print FreeProduct.empty_of_word_prod_eq_one /-
 theorem empty_of_word_prod_eq_one {w : Word H} (h : lift f w.Prod = 1) : w = Word.empty :=
   by
   by_contra hnotempty
   obtain ⟨i, j, w, rfl⟩ := neword.of_word w hnotempty
   exact lift_word_prod_nontrivial_of_not_empty f hcard X hXnonempty hXdisj hpp w h
 #align free_product.empty_of_word_prod_eq_one FreeProduct.empty_of_word_prod_eq_one
+-/
 
+#print FreeProduct.lift_injective_of_ping_pong /-
 /-- The Ping-Pong-Lemma.
 
 Given a group action of `G` on `X` so that the `H i` acts in a specific way on disjoint subsets
@@ -821,6 +906,7 @@ theorem lift_injective_of_ping_pong : Function.Injective (lift f) := by
     · rw [empty_of_word_prod_eq_one f hcard X hXnonempty hXdisj hpp Heq]
       rfl
 #align free_product.lift_injective_of_ping_pong FreeProduct.lift_injective_of_ping_pong
+-/
 
 end PingPongLemma
 
@@ -840,6 +926,7 @@ instance {ι : Type _} (G : ι → Type _) [∀ i, Group (G i)] [hG : ∀ i, IsF
           G i →* FreeGroup (Σ i, IsFreeGroup.Generators (G i))))
       (by ext; simp) (by ext; simp)
 
+#print freeGroupEquivFreeProduct /-
 -- NB: One might expect this theorem to be phrased with ℤ, but ℤ is an additive group,
 -- and using `multiplicative ℤ` runs into diamond issues.
 /-- A free group is a free product of copies of the free_group over one generator. -/
@@ -853,6 +940,7 @@ def freeGroupEquivFreeProduct {ι : Type u_1} :
   · ext i; rfl
   · ext (i a); cases a; rfl
 #align free_group_equiv_free_product freeGroupEquivFreeProduct
+-/
 
 section PingPongLemma
 
@@ -879,8 +967,7 @@ variable (hX : ∀ i, a i • Y iᶜ ⊆ X i)
 
 variable (hY : ∀ i, a⁻¹ i • X iᶜ ⊆ Y i)
 
-include hXnonempty hXdisj hYdisj hXYdisj hX hY
-
+#print FreeGroup.injective_lift_of_ping_pong /-
 /-- The Ping-Pong-Lemma.
 
 Given a group action of `G` on `X` so that the generators of the free groups act in specific
@@ -968,6 +1055,7 @@ theorem FreeGroup.injective_lift_of_ping_pong : Function.Injective (FreeGroup.li
               _ ⊆ Y i := hi
         _ ⊆ X' i := Set.subset_union_right _ _
 #align free_group.injective_lift_of_ping_pong FreeGroup.injective_lift_of_ping_pong
+-/
 
 end PingPongLemma
 
Diff
@@ -729,7 +729,6 @@ theorem lift_word_ping_pong {i j k} (w : NeWord H i j) (hk : j ≠ k) : lift f w
         simp [MulAction.mul_smul]
       _ ⊆ lift f w₁.prod • X k := (set_smul_subset_set_smul_iff.mpr (hIw₂ hm))
       _ ⊆ X i := hIw₁ hne
-      
 #align free_product.lift_word_ping_pong FreeProduct.lift_word_ping_pong
 
 include X hXnonempty hXdisj
@@ -952,9 +951,7 @@ theorem FreeGroup.injective_lift_of_ping_pong : Function.Injective (FreeGroup.li
               _ ⊆ a i ^ n • X i := (smul_set_mono <| hX i)
               _ ⊆ a i ^ n • Y iᶜ := (smul_set_mono (hXYdisj i i).subset_compl_right)
               _ ⊆ X i := hi
-              
         _ ⊆ X' i := Set.subset_union_left _ _
-        
     · have h1n : n ≤ -1 := by apply Int.le_of_lt_add_one; simpa using hgt
       calc
         a i ^ n • X' j ⊆ a i ^ n • X iᶜ :=
@@ -969,9 +966,7 @@ theorem FreeGroup.injective_lift_of_ping_pong : Function.Injective (FreeGroup.li
               _ ⊆ a i ^ n • Y i := (smul_set_mono <| hY i)
               _ ⊆ a i ^ n • X iᶜ := (smul_set_mono (hXYdisj i i).symm.subset_compl_right)
               _ ⊆ Y i := hi
-              
         _ ⊆ X' i := Set.subset_union_right _ _
-        
 #align free_group.injective_lift_of_ping_pong FreeGroup.injective_lift_of_ping_pong
 
 end PingPongLemma
Diff
@@ -767,30 +767,30 @@ include hcard
 
 theorem lift_word_prod_nontrivial_of_not_empty {i j} (w : NeWord H i j) : lift f w.Prod ≠ 1 := by
   classical
-    cases hcard
-    · obtain ⟨i, h1, h2⟩ := Cardinal.three_le hcard i j
-      exact lift_word_prod_nontrivial_of_other_i f X hXnonempty hXdisj hpp w h1 h2
-    · cases' hcard with k hcard
-      by_cases hh : i = k <;> by_cases hl : j = k
-      · subst hh; subst hl
-        exact lift_word_prod_nontrivial_of_head_eq_last f X hXnonempty hXdisj hpp w
-      · subst hh
-        change j ≠ i at hl 
-        exact lift_word_prod_nontrivial_of_head_card f X hXnonempty hXdisj hpp w hcard hl.symm
-      · subst hl
-        change i ≠ j at hh 
-        have : lift f w.inv.prod ≠ 1 :=
-          lift_word_prod_nontrivial_of_head_card f X hXnonempty hXdisj hpp w.inv hcard hh.symm
-        intro heq; apply this; simpa using HEq
-      · change i ≠ k at hh 
-        change j ≠ k at hl 
-        obtain ⟨h, hn1, -⟩ := Cardinal.three_le hcard 1 1
-        let w' : neword H k k :=
-          neword.append (neword.append (neword.singleton h hn1) hh.symm w) hl
-            (neword.singleton h⁻¹ (inv_ne_one.mpr hn1))
-        have hw' : lift f w'.prod ≠ 1 :=
-          lift_word_prod_nontrivial_of_head_eq_last f X hXnonempty hXdisj hpp w'
-        intro heq1; apply hw'; simp [w', heq1]
+  cases hcard
+  · obtain ⟨i, h1, h2⟩ := Cardinal.three_le hcard i j
+    exact lift_word_prod_nontrivial_of_other_i f X hXnonempty hXdisj hpp w h1 h2
+  · cases' hcard with k hcard
+    by_cases hh : i = k <;> by_cases hl : j = k
+    · subst hh; subst hl
+      exact lift_word_prod_nontrivial_of_head_eq_last f X hXnonempty hXdisj hpp w
+    · subst hh
+      change j ≠ i at hl 
+      exact lift_word_prod_nontrivial_of_head_card f X hXnonempty hXdisj hpp w hcard hl.symm
+    · subst hl
+      change i ≠ j at hh 
+      have : lift f w.inv.prod ≠ 1 :=
+        lift_word_prod_nontrivial_of_head_card f X hXnonempty hXdisj hpp w.inv hcard hh.symm
+      intro heq; apply this; simpa using HEq
+    · change i ≠ k at hh 
+      change j ≠ k at hl 
+      obtain ⟨h, hn1, -⟩ := Cardinal.three_le hcard 1 1
+      let w' : neword H k k :=
+        neword.append (neword.append (neword.singleton h hn1) hh.symm w) hl
+          (neword.singleton h⁻¹ (inv_ne_one.mpr hn1))
+      have hw' : lift f w'.prod ≠ 1 :=
+        lift_word_prod_nontrivial_of_head_eq_last f X hXnonempty hXdisj hpp w'
+      intro heq1; apply hw'; simp [w', heq1]
 #align free_product.lift_word_prod_nontrivial_of_not_empty FreeProduct.lift_word_prod_nontrivial_of_not_empty
 
 theorem empty_of_word_prod_eq_one {w : Word H} (h : lift f w.Prod = 1) : w = Word.empty :=
@@ -815,12 +815,12 @@ condition is only needed if `# ι = 2`, and we accept `3 ≤ # ι` as an alterna
 -/
 theorem lift_injective_of_ping_pong : Function.Injective (lift f) := by
   classical
-    apply (injective_iff_map_eq_one (lift f)).mpr
-    rw [(FreeProduct.Word.equiv : _ ≃ word H).forall_congr_left']
-    · intro w Heq
-      dsimp [word.equiv] at *
-      · rw [empty_of_word_prod_eq_one f hcard X hXnonempty hXdisj hpp Heq]
-        rfl
+  apply (injective_iff_map_eq_one (lift f)).mpr
+  rw [(FreeProduct.Word.equiv : _ ≃ word H).forall_congr_left']
+  · intro w Heq
+    dsimp [word.equiv] at *
+    · rw [empty_of_word_prod_eq_one f hcard X hXnonempty hXdisj hpp Heq]
+      rfl
 #align free_product.lift_injective_of_ping_pong FreeProduct.lift_injective_of_ping_pong
 
 end PingPongLemma
Diff
@@ -80,7 +80,7 @@ variable {ι : Type _} (M : ∀ i : ι, Type _) [∀ i, Monoid (M i)]
 #print FreeProduct.Rel /-
 /-- A relation on the free monoid on alphabet `Σ i, M i`, relating `⟨i, 1⟩` with `1` and
 `⟨i, x⟩ * ⟨i, y⟩` with `⟨i, x * y⟩`. -/
-inductive FreeProduct.Rel : FreeMonoid (Σi, M i) → FreeMonoid (Σi, M i) → Prop
+inductive FreeProduct.Rel : FreeMonoid (Σ i, M i) → FreeMonoid (Σ i, M i) → Prop
   | of_one (i : ι) : FreeProduct.Rel (FreeMonoid.of ⟨i, 1⟩) 1
   |
   of_mul {i : ι} (x y : M i) :
@@ -91,7 +91,8 @@ inductive FreeProduct.Rel : FreeMonoid (Σi, M i) → FreeMonoid (Σi, M i) →
 #print FreeProduct /-
 /-- The free product (categorical coproduct) of an indexed family of monoids. -/
 def FreeProduct : Type _ :=
-  (conGen (FreeProduct.Rel M)).Quotient deriving Monoid, Inhabited
+  (conGen (FreeProduct.Rel M)).Quotient
+deriving Monoid, Inhabited
 #align free_product FreeProduct
 -/
 
@@ -102,7 +103,7 @@ namespace FreeProduct
 letters can come from the same summand. -/
 @[ext]
 structure Word where
-  toList : List (Σi, M i)
+  toList : List (Σ i, M i)
   ne_one : ∀ l ∈ to_list, Sigma.snd l ≠ 1
   chain_ne : to_list.Chain' fun l l' => Sigma.fst l ≠ Sigma.fst l'
 #align free_product.word FreeProduct.Word
@@ -139,7 +140,7 @@ universal property of the free product, charaterizing it as a categorical coprod
 def lift : (∀ i, M i →* N) ≃ (FreeProduct M →* N)
     where
   toFun fi :=
-    Con.lift _ (FreeMonoid.lift fun p : Σi, M i => fi p.fst p.snd) <|
+    Con.lift _ (FreeMonoid.lift fun p : Σ i, M i => fi p.fst p.snd) <|
       Con.conGen_le
         (by
           simp_rw [Con.rel_eq_coe, Con.ker_rel]
@@ -332,7 +333,7 @@ def rcons {i} (p : Pair M i) : Word M :=
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
 /-- Given a word of the form `⟨l :: ls, h1, h2⟩`, we can form a word of the form `⟨ls, _, _⟩`,
 dropping the first letter. -/
-private def mk_aux {l} (ls : List (Σi, M i)) (h1 : ∀ l' ∈ l::ls, Sigma.snd l' ≠ 1)
+private def mk_aux {l} (ls : List (Σ i, M i)) (h1 : ∀ l' ∈ l::ls, Sigma.snd l' ≠ 1)
     (h2 : (l::ls).Chain' _) : Word M :=
   ⟨ls, fun l' hl => h1 _ (List.mem_cons_of_mem _ hl), h2.tail⟩
 
@@ -352,14 +353,14 @@ theorem rcons_inj {i} : Function.Injective (rcons : Pair M i → Word M) :=
   by
   rintro ⟨m, w, h⟩ ⟨m', w', h'⟩ he
   by_cases hm : m = 1 <;> by_cases hm' : m' = 1
-  · simp only [rcons, dif_pos hm, dif_pos hm'] at he; cc
-  · exfalso; simp only [rcons, dif_pos hm, dif_neg hm'] at he; rw [he] at h; exact h rfl
-  · exfalso; simp only [rcons, dif_pos hm', dif_neg hm] at he; rw [← he] at h'; exact h' rfl
+  · simp only [rcons, dif_pos hm, dif_pos hm'] at he ; cc
+  · exfalso; simp only [rcons, dif_pos hm, dif_neg hm'] at he ; rw [he] at h ; exact h rfl
+  · exfalso; simp only [rcons, dif_pos hm', dif_neg hm] at he ; rw [← he] at h' ; exact h' rfl
   · have : m = m' ∧ w.to_list = w'.to_list := by
       simpa only [rcons, dif_neg hm, dif_neg hm', true_and_iff, eq_self_iff_true, Subtype.mk_eq_mk,
         heq_iff_eq, ← Subtype.ext_iff_val] using he
     rcases this with ⟨rfl, h⟩
-    congr ; exact word.ext _ _ h
+    congr; exact word.ext _ _ h
 #align free_product.word.rcons_inj FreeProduct.Word.rcons_inj
 
 variable [DecidableEq ι]
@@ -438,8 +439,8 @@ theorem smul_induction {C : Word M → Prop} (h_empty : C empty)
 theorem prod_smul (m) : ∀ w : Word M, prod (m • w) = m * prod w :=
   by
   apply m.induction_on
-  · intro ; rw [one_smul, one_mul]
-  · intros ;
+  · intro; rw [one_smul, one_mul]
+  · intros;
     rw [of_smul_def, prod_rcons, of.map_mul, mul_assoc, ← prod_rcons, ← equiv_pair_symm,
       Equiv.symm_apply_apply]
   · intro x y hx hy w; rw [mul_smul, hx, hy, mul_assoc]
@@ -488,7 +489,7 @@ open Word
 #print FreeProduct.NeWord.toList /-
 /-- The list represented by a given `neword` -/
 @[simp]
-def toList : ∀ {i j} (w : NeWord M i j), List (Σi, M i)
+def toList : ∀ {i j} (w : NeWord M i j), List (Σ i, M i)
   | i, _, singleton x hne1 => [⟨i, x⟩]
   | _, _, append w₁ hne w₂ => w₁.toList ++ w₂.toList
 #align free_product.neword.to_list FreeProduct.NeWord.toList
@@ -545,7 +546,7 @@ def toWord {i j} (w : NeWord M i j) : Word M
       exact w_hne1
       exfalso; apply H
     · intro l h
-      simp only [to_list, List.mem_append] at h
+      simp only [to_list, List.mem_append] at h 
       cases h
       · exact w_ih_w₁ _ h
       · exact w_ih_w₂ _ h
@@ -554,8 +555,8 @@ def toWord {i j} (w : NeWord M i j) : Word M
     · exact List.chain'_singleton _
     · apply List.Chain'.append w_ih_w₁ w_ih_w₂
       intro x hx y hy
-      rw [w_w₁.to_list_last', Option.mem_some_iff] at hx
-      rw [w_w₂.to_list_head', Option.mem_some_iff] at hy
+      rw [w_w₁.to_list_last', Option.mem_some_iff] at hx 
+      rw [w_w₂.to_list_head', Option.mem_some_iff] at hy 
       subst hx; subst hy
       exact w_hne
 #align free_product.neword.to_word FreeProduct.NeWord.toWord
@@ -563,18 +564,18 @@ def toWord {i j} (w : NeWord M i j) : Word M
 
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
 /-- Every nonempty `word M` can be constructed as a `neword M i j` -/
-theorem of_word (w : Word M) (h : w ≠ Empty) : ∃ (i j : _)(w' : NeWord M i j), w'.toWord = w :=
+theorem of_word (w : Word M) (h : w ≠ Empty) : ∃ (i j : _) (w' : NeWord M i j), w'.toWord = w :=
   by
-  rsuffices ⟨i, j, w, h⟩ : ∃ (i j : _)(w' : neword M i j), w'.to_word.to_list = w.to_list
+  rsuffices ⟨i, j, w, h⟩ : ∃ (i j : _) (w' : neword M i j), w'.to_word.to_list = w.to_list
   · refine' ⟨i, j, w, _⟩; ext; rw [h]
   cases' w with l hnot1 hchain
   induction' l with x l hi
   · contradiction
-  · rw [List.forall_mem_cons] at hnot1
+  · rw [List.forall_mem_cons] at hnot1 
     cases' l with y l
     · refine' ⟨x.1, x.1, singleton x.2 hnot1.1, _⟩
       simp [to_word]
-    · rw [List.chain'_cons] at hchain
+    · rw [List.chain'_cons] at hchain 
       specialize hi hnot1.2 hchain.2 (by rintro ⟨rfl⟩)
       obtain ⟨i, j, w', hw' : w'.to_list = y::l⟩ := hi
       obtain rfl : y = ⟨i, w'.head⟩ := by simpa [hw'] using w'.to_list_head'
@@ -774,15 +775,15 @@ theorem lift_word_prod_nontrivial_of_not_empty {i j} (w : NeWord H i j) : lift f
       · subst hh; subst hl
         exact lift_word_prod_nontrivial_of_head_eq_last f X hXnonempty hXdisj hpp w
       · subst hh
-        change j ≠ i at hl
+        change j ≠ i at hl 
         exact lift_word_prod_nontrivial_of_head_card f X hXnonempty hXdisj hpp w hcard hl.symm
       · subst hl
-        change i ≠ j at hh
+        change i ≠ j at hh 
         have : lift f w.inv.prod ≠ 1 :=
           lift_word_prod_nontrivial_of_head_card f X hXnonempty hXdisj hpp w.inv hcard hh.symm
         intro heq; apply this; simpa using HEq
-      · change i ≠ k at hh
-        change j ≠ k at hl
+      · change i ≠ k at hh 
+        change j ≠ k at hl 
         obtain ⟨h, hn1, -⟩ := Cardinal.three_le hcard 1 1
         let w' : neword H k k :=
           neword.append (neword.append (neword.singleton h hn1) hh.symm w) hl
@@ -829,15 +830,15 @@ end PingPongLemma
 instance {ι : Type _} (G : ι → Type _) [∀ i, Group (G i)] [hG : ∀ i, IsFreeGroup (G i)] :
     IsFreeGroup (FreeProduct G)
     where
-  Generators := Σi, IsFreeGroup.Generators (G i)
+  Generators := Σ i, IsFreeGroup.Generators (G i)
   MulEquiv :=
     MonoidHom.toMulEquiv
-      (FreeGroup.lift fun x : Σi, IsFreeGroup.Generators (G i) =>
+      (FreeGroup.lift fun x : Σ i, IsFreeGroup.Generators (G i) =>
         FreeProduct.of (IsFreeGroup.of x.2 : G x.1))
       (FreeProduct.lift fun i : ι =>
         (IsFreeGroup.lift fun x : IsFreeGroup.Generators (G i) =>
-            FreeGroup.of (⟨i, x⟩ : Σi, IsFreeGroup.Generators (G i)) :
-          G i →* FreeGroup (Σi, IsFreeGroup.Generators (G i))))
+            FreeGroup.of (⟨i, x⟩ : Σ i, IsFreeGroup.Generators (G i)) :
+          G i →* FreeGroup (Σ i, IsFreeGroup.Generators (G i))))
       (by ext; simp) (by ext; simp)
 
 -- NB: One might expect this theorem to be phrased with ℤ, but ℤ is an additive group,
Diff
@@ -689,9 +689,9 @@ end Neword
 
 section PingPongLemma
 
-open Pointwise
+open scoped Pointwise
 
-open Cardinal
+open scoped Cardinal
 
 variable [hnontriv : Nontrivial ι]
 
@@ -856,7 +856,7 @@ def freeGroupEquivFreeProduct {ι : Type u_1} :
 
 section PingPongLemma
 
-open Pointwise Cardinal
+open scoped Pointwise Cardinal
 
 variable [Nontrivial ι]
 
Diff
@@ -110,12 +110,6 @@ structure Word where
 
 variable {M}
 
-/- warning: free_product.of -> FreeProduct.of is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι}, MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))
-but is expected to have type
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι}, MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))
-Case conversion may be inaccurate. Consider using '#align free_product.of FreeProduct.ofₓ'. -/
 /-- The inclusion of a summand into the free product. -/
 def of {i : ι} : M i →* FreeProduct M
     where
@@ -124,21 +118,12 @@ def of {i : ι} : M i →* FreeProduct M
   map_mul' x y := Eq.symm <| (Con.eq _).mpr (ConGen.Rel.of _ _ (FreeProduct.Rel.of_mul x y))
 #align free_product.of FreeProduct.of
 
-/- warning: free_product.of_apply -> FreeProduct.of_apply is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align free_product.of_apply FreeProduct.of_applyₓ'. -/
 theorem of_apply {i} (m : M i) : of m = Con.mk' _ (FreeMonoid.of <| Sigma.mk i m) :=
   rfl
 #align free_product.of_apply FreeProduct.of_apply
 
 variable {N : Type _} [Monoid N]
 
-/- warning: free_product.ext_hom -> FreeProduct.ext_hom is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {N : Type.{u3}} [_inst_2 : Monoid.{u3} N] (f : MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_2)) (g : MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_2)), (forall (i : ι), Eq.{max (succ u3) (succ u2)} (MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_2)) (MonoidHom.comp.{u2, max u1 u2, u3} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_2) f (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (MonoidHom.comp.{u2, max u1 u2, u3} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_2) g (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i))) -> (Eq.{max (succ u3) (succ (max u1 u2))} (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_2)) f g)
-but is expected to have type
-  forall {ι : Type.{u2}} {M : ι -> Type.{u3}} [_inst_1 : forall (i : ι), Monoid.{u3} (M i)] {N : Type.{u1}} [_inst_2 : Monoid.{u1} N] (f : MonoidHom.{max u3 u2, u1} (FreeProduct.{u2, u3} ι M (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u2 u3} (FreeProduct.{u2, u3} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u3} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} N _inst_2)) (g : MonoidHom.{max u3 u2, u1} (FreeProduct.{u2, u3} ι M (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u2 u3} (FreeProduct.{u2, u3} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u3} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} N _inst_2)), (forall (i : ι), Eq.{max (succ u3) (succ u1)} (MonoidHom.{u3, u1} (M i) N (Monoid.toMulOneClass.{u3} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u1} N _inst_2)) (MonoidHom.comp.{u3, max u2 u3, u1} (M i) (FreeProduct.{u2, u3} ι M (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{u3} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u3} (FreeProduct.{u2, u3} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u3} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} N _inst_2) f (FreeProduct.of.{u2, u3} ι M (fun (i : ι) => _inst_1 i) i)) (MonoidHom.comp.{u3, max u2 u3, u1} (M i) (FreeProduct.{u2, u3} ι M (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{u3} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u3} (FreeProduct.{u2, u3} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u3} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} N _inst_2) g (FreeProduct.of.{u2, u3} ι M (fun (i : ι) => _inst_1 i) i))) -> (Eq.{max (max (succ u2) (succ u3)) (succ u1)} (MonoidHom.{max u3 u2, u1} (FreeProduct.{u2, u3} ι M (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u2 u3} (FreeProduct.{u2, u3} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u3} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} N _inst_2)) f g)
-Case conversion may be inaccurate. Consider using '#align free_product.ext_hom FreeProduct.ext_homₓ'. -/
 /-- See note [partially-applied ext lemmas]. -/
 @[ext]
 theorem ext_hom (f g : FreeProduct M →* N) (h : ∀ i, f.comp (of : M i →* _) = g.comp of) : f = g :=
@@ -148,12 +133,6 @@ theorem ext_hom (f g : FreeProduct M →* N) (h : ∀ i, f.comp (of : M i →* _
         MonoidHom.comp_apply, h]
 #align free_product.ext_hom FreeProduct.ext_hom
 
-/- warning: free_product.lift -> FreeProduct.lift is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {N : Type.{u3}} [_inst_2 : Monoid.{u3} N], Equiv.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_2)) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_2))
-but is expected to have type
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {N : Type.{u3}} [_inst_2 : Monoid.{u3} N], Equiv.{max (max (succ u1) (succ u2)) (succ u3), max (succ u3) (succ (max u2 u1))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_2)) (MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_2))
-Case conversion may be inaccurate. Consider using '#align free_product.lift FreeProduct.liftₓ'. -/
 /-- A map out of the free product corresponds to a family of maps out of the summands. This is the
 universal property of the free product, charaterizing it as a categorical coproduct. -/
 @[simps symm_apply]
@@ -180,20 +159,11 @@ def lift : (∀ i, M i →* N) ≃ (FreeProduct M →* N)
     simp only [MonoidHom.comp_apply, of_apply, Con.lift_mk', FreeMonoid.lift_eval_of]
 #align free_product.lift FreeProduct.lift
 
-/- warning: free_product.lift_of -> FreeProduct.lift_of is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align free_product.lift_of FreeProduct.lift_ofₓ'. -/
 @[simp]
 theorem lift_of {N} [Monoid N] (fi : ∀ i, M i →* N) {i} (m : M i) : lift fi (of m) = fi i m := by
   conv_rhs => rw [← lift.symm_apply_apply fi, lift_symm_apply, MonoidHom.comp_apply]
 #align free_product.lift_of FreeProduct.lift_of
 
-/- warning: free_product.induction_on -> FreeProduct.induction_on is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {C : (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) -> Prop} (m : FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)), (C (OfNat.ofNat.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) 1 (OfNat.mk.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) 1 (One.one.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toHasOne.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))))))) -> (forall (i : ι) (m : M i), C (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m)) -> (forall (x : FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (y : FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)), (C x) -> (C y) -> (C (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instHMul.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toHasMul.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i))))) x y))) -> (C m)
-but is expected to have type
-  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] {C : (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) -> Prop} (m : FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)), (C (OfNat.ofNat.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) 1 (One.toOfNat1.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toOne.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))) -> (forall (i : ι) (m : M i), C (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) m)) -> (forall (x : FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (y : FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)), (C x) -> (C y) -> (C (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instHMul.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))))) x y))) -> (C m)
-Case conversion may be inaccurate. Consider using '#align free_product.induction_on FreeProduct.induction_onₓ'. -/
 @[elab_as_elim]
 theorem induction_on {C : FreeProduct M → Prop} (m : FreeProduct M) (h_one : C 1)
     (h_of : ∀ (i) (m : M i), C (of m)) (h_mul : ∀ x y, C x → C y → C (x * y)) : C m :=
@@ -206,27 +176,15 @@ theorem induction_on {C : FreeProduct M → Prop} (m : FreeProduct M) (h_one : C
   simp [MonoidHom.codRestrict]
 #align free_product.induction_on FreeProduct.induction_on
 
-/- warning: free_product.of_left_inverse -> FreeProduct.of_leftInverse is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align free_product.of_left_inverse FreeProduct.of_leftInverseₓ'. -/
 theorem of_leftInverse [DecidableEq ι] (i : ι) :
     Function.LeftInverse (lift <| Pi.mulSingle i (MonoidHom.id (M i))) of := fun x => by
   simp only [lift_of, Pi.mulSingle_eq_same, MonoidHom.id_apply]
 #align free_product.of_left_inverse FreeProduct.of_leftInverse
 
-/- warning: free_product.of_injective -> FreeProduct.of_injective is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] (i : ι), Function.Injective.{succ u2, succ (max u1 u2)} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i))
-but is expected to have type
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] (i : ι), Function.Injective.{succ u2, max (succ u1) (succ u2)} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FunLike.coe.{max (succ u1) (succ u2), succ u2, max (succ u1) (succ u2)} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u1 u2, u2, max u1 u2} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, max u1 u2} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i))
-Case conversion may be inaccurate. Consider using '#align free_product.of_injective FreeProduct.of_injectiveₓ'. -/
 theorem of_injective (i : ι) : Function.Injective ⇑(of : M i →* _) := by
   classical exact (of_left_inverse i).Injective
 #align free_product.of_injective FreeProduct.of_injective
 
-/- warning: free_product.lift_mrange_le -> FreeProduct.lift_mrange_le is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align free_product.lift_mrange_le FreeProduct.lift_mrange_leₓ'. -/
 theorem lift_mrange_le {N} [Monoid N] (f : ∀ i, M i →* N) {s : Submonoid N}
     (h : ∀ i, (f i).mrange ≤ s) : (lift f).mrange ≤ s :=
   by
@@ -255,9 +213,6 @@ instance : Inv (FreeProduct G)
     where inv :=
     MulOpposite.unop ∘ lift fun i => (of : G i →* _).op.comp (MulEquiv.inv' (G i)).toMonoidHom
 
-/- warning: free_product.inv_def -> FreeProduct.inv_def is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align free_product.inv_def FreeProduct.inv_defₓ'. -/
 theorem inv_def (x : FreeProduct G) :
     x⁻¹ =
       MulOpposite.unop
@@ -277,9 +232,6 @@ instance : Group (FreeProduct G) :=
         rw [MonoidHom.map_mul, MulOpposite.unop_mul, mul_assoc, ← mul_assoc _ x y, hx, one_mul,
           hy] }
 
-/- warning: free_product.lift_range_le -> FreeProduct.lift_range_le is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align free_product.lift_range_le FreeProduct.lift_range_leₓ'. -/
 theorem lift_range_le {N} [Group N] (f : ∀ i, G i →* N) {s : Subgroup N}
     (h : ∀ i, (f i).range ≤ s) : (lift f).range ≤ s :=
   by
@@ -323,12 +275,6 @@ def prod (w : Word M) : FreeProduct M :=
 #align free_product.word.prod FreeProduct.Word.prod
 -/
 
-/- warning: free_product.word.prod_empty -> FreeProduct.Word.prod_empty is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)], Eq.{succ (max u1 u2)} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.prod.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (FreeProduct.Word.empty.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (OfNat.ofNat.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) 1 (OfNat.mk.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) 1 (One.one.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toHasOne.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))))))
-but is expected to have type
-  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)], Eq.{max (succ u2) (succ u1)} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.prod.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (FreeProduct.Word.empty.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (OfNat.ofNat.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) 1 (One.toOfNat1.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toOne.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))
-Case conversion may be inaccurate. Consider using '#align free_product.word.prod_empty FreeProduct.Word.prod_emptyₓ'. -/
 @[simp]
 theorem prod_empty : prod (empty : Word M) = 1 :=
   rfl
@@ -342,12 +288,6 @@ def fstIdx (w : Word M) : Option ι :=
 #align free_product.word.fst_idx FreeProduct.Word.fstIdx
 -/
 
-/- warning: free_product.word.fst_idx_ne_iff -> FreeProduct.Word.fstIdx_ne_iff is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {w : FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)} {i : ι}, Iff (Ne.{succ u1} (Option.{u1} ι) (FreeProduct.Word.fstIdx.{u1, u2} ι M (fun (i : ι) => _inst_1 i) w) (Option.some.{u1} ι i)) (forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.Mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Option.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Option.hasMem.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.head?.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (FreeProduct.Word.toList.{u1, u2} ι M (fun (i : ι) => _inst_1 i) w))) -> (Ne.{succ u1} ι i (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)))
-but is expected to have type
-  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] {w : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)} {i : ι}, Iff (Ne.{succ u2} (Option.{u2} ι) (FreeProduct.Word.fstIdx.{u2, u1} ι M (fun (i : ι) => _inst_1 i) w) (Option.some.{u2} ι i)) (forall (l : Sigma.{u2, u1} ι (fun (i : ι) => M i)), (Membership.mem.{max u2 u1, max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i)) (Option.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Option.instMembershipOption.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) l (List.head?.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i)) (FreeProduct.Word.toList.{u2, u1} ι M (fun (i : ι) => _inst_1 i) w))) -> (Ne.{succ u2} ι i (Sigma.fst.{u2, u1} ι (fun (i : ι) => M i) l)))
-Case conversion may be inaccurate. Consider using '#align free_product.word.fst_idx_ne_iff FreeProduct.Word.fstIdx_ne_iffₓ'. -/
 theorem fstIdx_ne_iff {w : Word M} {i} :
     fstIdx w ≠ some i ↔ ∀ l ∈ w.toList.head?, i ≠ Sigma.fst l :=
   not_iff_not.mp <| by simp [fst_idx]
@@ -396,33 +336,18 @@ private def mk_aux {l} (ls : List (Σi, M i)) (h1 : ∀ l' ∈ l::ls, Sigma.snd
     (h2 : (l::ls).Chain' _) : Word M :=
   ⟨ls, fun l' hl => h1 _ (List.mem_cons_of_mem _ hl), h2.tail⟩
 
-/- warning: free_product.word.cons_eq_rcons -> FreeProduct.Word.cons_eq_rcons is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align free_product.word.cons_eq_rcons FreeProduct.Word.cons_eq_rconsₓ'. -/
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
 theorem cons_eq_rcons {i} {m : M i} {ls h1 h2} :
     Word.mk (⟨i, m⟩::ls) h1 h2 = rcons ⟨m, mkAux ls h1 h2, fstIdx_ne_iff.mpr h2.rel_head?⟩ := by
   rw [rcons, dif_neg]; rfl; exact h1 ⟨i, m⟩ (ls.mem_cons_self _)
 #align free_product.word.cons_eq_rcons FreeProduct.Word.cons_eq_rcons
 
-/- warning: free_product.word.prod_rcons -> FreeProduct.Word.prod_rcons is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] {i : ι} (p : FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i), Eq.{succ (max u1 u2)} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.prod.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (FreeProduct.Word.rcons.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i p)) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instHMul.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toHasMul.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i))))) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.Pair.head.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i p)) (FreeProduct.Word.prod.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (FreeProduct.Word.Pair.tail.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i p)))
-but is expected to have type
-  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u1} (M i)] {i : ι} (p : FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i), Eq.{max (succ u2) (succ u1)} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.prod.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (FreeProduct.Word.rcons.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i p)) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i p)) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i p)) (instHMul.{max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i p)) (MulOneClass.toMul.{max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i p)) (Monoid.toMulOneClass.{max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i p)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.Pair.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i p)) (FreeProduct.Word.prod.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (FreeProduct.Word.Pair.tail.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i p)))
-Case conversion may be inaccurate. Consider using '#align free_product.word.prod_rcons FreeProduct.Word.prod_rconsₓ'. -/
 @[simp]
 theorem prod_rcons {i} (p : Pair M i) : prod (rcons p) = of p.headI * prod p.tail :=
   if hm : p.headI = 1 then by rw [rcons, dif_pos hm, hm, MonoidHom.map_one, one_mul]
   else by rw [rcons, dif_neg hm, Prod, List.map_cons, List.prod_cons, Prod]
 #align free_product.word.prod_rcons FreeProduct.Word.prod_rcons
 
-/- warning: free_product.word.rcons_inj -> FreeProduct.Word.rcons_inj is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] {i : ι}, Function.Injective.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.rcons.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i)
-but is expected to have type
-  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u1} (M i)] {i : ι}, Function.Injective.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.rcons.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i)
-Case conversion may be inaccurate. Consider using '#align free_product.word.rcons_inj FreeProduct.Word.rcons_injₓ'. -/
 theorem rcons_inj {i} : Function.Injective (rcons : Pair M i → Word M) :=
   by
   rintro ⟨m, w, h⟩ ⟨m', w', h'⟩ he
@@ -466,22 +391,10 @@ def equivPair (i) : Word M ≃ Pair M i
 #align free_product.word.equiv_pair FreeProduct.Word.equivPair
 -/
 
-/- warning: free_product.word.equiv_pair_symm -> FreeProduct.Word.equivPair_symm is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] [_inst_4 : DecidableEq.{succ u1} ι] (i : ι) (p : FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i), Eq.{max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (coeFn.{max 1 (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) => (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) -> (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (Equiv.symm.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.equivPair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i)) p) (FreeProduct.Word.rcons.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i p)
-but is expected to have type
-  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u1} (M i)] [_inst_4 : DecidableEq.{succ u2} ι] (i : ι) (p : FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) => FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) p) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) (fun (_x : FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) => FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.equivPair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i)) p) (FreeProduct.Word.rcons.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i p)
-Case conversion may be inaccurate. Consider using '#align free_product.word.equiv_pair_symm FreeProduct.Word.equivPair_symmₓ'. -/
 theorem equivPair_symm (i) (p : Pair M i) : (equivPair i).symm p = rcons p :=
   rfl
 #align free_product.word.equiv_pair_symm FreeProduct.Word.equivPair_symm
 
-/- warning: free_product.word.equiv_pair_eq_of_fst_idx_ne -> FreeProduct.Word.equivPair_eq_of_fstIdx_ne is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] [_inst_4 : DecidableEq.{succ u1} ι] {i : ι} {w : FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)} (h : Ne.{succ u1} (Option.{u1} ι) (FreeProduct.Word.fstIdx.{u1, u2} ι M (fun (i : ι) => _inst_1 i) w) (Option.some.{u1} ι i)), Eq.{max (succ u1) (succ u2)} (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) (coeFn.{max 1 (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) => (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) -> (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.equivPair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i) w) (FreeProduct.Word.Pair.mk.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i (OfNat.ofNat.{u2} (M i) 1 (OfNat.mk.{u2} (M i) 1 (One.one.{u2} (M i) (MulOneClass.toHasOne.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)))))) w h)
-but is expected to have type
-  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u1} (M i)] [_inst_4 : DecidableEq.{succ u2} ι] {i : ι} {w : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)} (h : Ne.{succ u2} (Option.{u2} ι) (FreeProduct.Word.fstIdx.{u2, u1} ι M (fun (i : ι) => _inst_1 i) w) (Option.some.{u2} ι i)), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) w) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (fun (_x : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.equivPair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i) w) (FreeProduct.Word.Pair.mk.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i (OfNat.ofNat.{u1} (M i) 1 (One.toOfNat1.{u1} (M i) (Monoid.toOne.{u1} (M i) (_inst_1 i)))) w h)
-Case conversion may be inaccurate. Consider using '#align free_product.word.equiv_pair_eq_of_fst_idx_ne FreeProduct.Word.equivPair_eq_of_fstIdx_neₓ'. -/
 theorem equivPair_eq_of_fstIdx_ne {i} {w : Word M} (h : fstIdx w ≠ some i) :
     equivPair i w = ⟨1, w, h⟩ :=
   (equivPair i).apply_eq_iff_eq_symm_apply.mpr <| Eq.symm (dif_pos rfl)
@@ -499,29 +412,17 @@ instance summandAction (i) : MulAction (M i) (Word M)
 instance : MulAction (FreeProduct M) (Word M) :=
   MulAction.ofEndHom (lift fun i => MulAction.toEndHom)
 
-/- warning: free_product.word.of_smul_def -> FreeProduct.Word.of_smul_def is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align free_product.word.of_smul_def FreeProduct.Word.of_smul_defₓ'. -/
 theorem of_smul_def (i) (w : Word M) (m : M i) :
     of m • w = rcons { equivPair i w with headI := m * (equivPair i w).headI } :=
   rfl
 #align free_product.word.of_smul_def FreeProduct.Word.of_smul_def
 
-/- warning: free_product.word.cons_eq_smul -> FreeProduct.Word.cons_eq_smul is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] [_inst_4 : DecidableEq.{succ u1} ι] {i : ι} {m : M i} {ls : List.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))} {h1 : forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.Mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (List.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (List.hasMem.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)) -> (Ne.{succ u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Sigma.snd.{u1, u2} ι (fun (i : ι) => M i) l) (OfNat.ofNat.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (OfNat.mk.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (One.one.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (MulOneClass.toHasOne.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Monoid.toMulOneClass.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (_inst_1 (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l))))))))} {h2 : List.Chain'.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (fun (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)) (l' : Sigma.{u1, u2} ι (fun (i : ι) => M i)) => Ne.{succ u1} ι (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l) (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l')) (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)}, Eq.{max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mk.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls) h1 h2) (SMul.smul.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i)) (MulAction.toHasSmul.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mulAction.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b))) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m) (_Private.1265251317.mkAux.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2))
-but is expected to have type
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] [_inst_4 : DecidableEq.{succ u1} ι] {i : ι} {m : M i} {ls : List.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i))} {h1 : forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (List.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (List.instMembershipList.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.cons.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)) -> (Ne.{succ u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Sigma.snd.{u1, u2} ι (fun (i : ι) => M i) l) (OfNat.ofNat.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (One.toOfNat1.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Monoid.toOne.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (_inst_1 (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l))))))} {h2 : List.Chain'.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (fun (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)) (l' : Sigma.{u1, u2} ι (fun (i : ι) => M i)) => Ne.{succ u1} ι (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l) (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l')) (List.cons.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)}, Eq.{max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mk.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (List.cons.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls) h1 h2) (HSMul.hSMul.{max u1 u2, max u2 u1, max u1 u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instHSMul.{max u1 u2, max u1 u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (MulAction.toSMul.{max u1 u2, max u1 u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.instMulActionFreeProductWordInstMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, max (succ u2) (succ u1)} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m) (_private.Mathlib.GroupTheory.FreeProduct.0.FreeProduct.Word.mkAux.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2))
-Case conversion may be inaccurate. Consider using '#align free_product.word.cons_eq_smul FreeProduct.Word.cons_eq_smulₓ'. -/
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
 theorem cons_eq_smul {i} {m : M i} {ls h1 h2} :
     Word.mk (⟨i, m⟩::ls) h1 h2 = of m • mkAux ls h1 h2 := by
   rw [cons_eq_rcons, of_smul_def, equiv_pair_eq_of_fst_idx_ne _] <;> simp only [mul_one]
 #align free_product.word.cons_eq_smul FreeProduct.Word.cons_eq_smul
 
-/- warning: free_product.word.smul_induction -> FreeProduct.Word.smul_induction is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align free_product.word.smul_induction FreeProduct.Word.smul_inductionₓ'. -/
 theorem smul_induction {C : Word M → Prop} (h_empty : C empty)
     (h_smul : ∀ (i) (m : M i) (w), C w → C (of m • w)) (w : Word M) : C w :=
   by
@@ -533,12 +434,6 @@ theorem smul_induction {C : Word M → Prop} (h_empty : C empty)
   exact h_smul _ _ _ (ih _ _)
 #align free_product.word.smul_induction FreeProduct.Word.smul_induction
 
-/- warning: free_product.word.prod_smul -> FreeProduct.Word.prod_smul is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] [_inst_4 : DecidableEq.{succ u1} ι] (m : FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (w : FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)), Eq.{succ (max u1 u2)} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.prod.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (SMul.smul.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulAction.toHasSmul.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mulAction.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b))) m w)) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instHMul.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toHasMul.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i))))) m (FreeProduct.Word.prod.{u1, u2} ι M (fun (i : ι) => _inst_1 i) w))
-but is expected to have type
-  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u1} (M i)] [_inst_4 : DecidableEq.{succ u2} ι] (m : FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (w : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)), Eq.{max (succ u1) (succ u2)} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.prod.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (HSMul.hSMul.{max u2 u1, max u2 u1, max u1 u2} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instHSMul.{max u2 u1, max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulAction.toSMul.{max u2 u1, max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.instMulActionFreeProductWordInstMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b)))) m w)) (HMul.hMul.{max u2 u1, max u2 u1, max u1 u2} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instHMul.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))))) m (FreeProduct.Word.prod.{u2, u1} ι M (fun (i : ι) => _inst_1 i) w))
-Case conversion may be inaccurate. Consider using '#align free_product.word.prod_smul FreeProduct.Word.prod_smulₓ'. -/
 @[simp]
 theorem prod_smul (m) : ∀ w : Word M, prod (m • w) = m * prod w :=
   by
@@ -599,12 +494,6 @@ def toList : ∀ {i j} (w : NeWord M i j), List (Σi, M i)
 #align free_product.neword.to_list FreeProduct.NeWord.toList
 -/
 
-/- warning: free_product.neword.to_list_ne_nil -> FreeProduct.NeWord.toList_ne_nil is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j), Ne.{succ (max u1 u2)} (List.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (FreeProduct.NeWord.toList.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w) (List.nil.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)))
-but is expected to have type
-  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j), Ne.{max (succ u2) (succ u1)} (List.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeProduct.NeWord.toList.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w) (List.nil.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i)))
-Case conversion may be inaccurate. Consider using '#align free_product.neword.to_list_ne_nil FreeProduct.NeWord.toList_ne_nilₓ'. -/
 theorem toList_ne_nil {i j} (w : NeWord M i j) : w.toList ≠ List.nil := by induction w;
   · rintro ⟨rfl⟩; · apply List.append_ne_nil_of_ne_nil_left; assumption
 #align free_product.neword.to_list_ne_nil FreeProduct.NeWord.toList_ne_nil
@@ -627,12 +516,6 @@ def last : ∀ {i j} (w : NeWord M i j), M j
 #align free_product.neword.last FreeProduct.NeWord.last
 -/
 
-/- warning: free_product.neword.to_list_head' -> FreeProduct.NeWord.toList_head? is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j), Eq.{succ (max u1 u2)} (Option.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (List.head?.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (FreeProduct.NeWord.toList.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w)) (Option.some.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i (FreeProduct.NeWord.head.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w)))
-but is expected to have type
-  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j), Eq.{max (succ u2) (succ u1)} (Option.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (List.head?.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i)) (FreeProduct.NeWord.toList.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w)) (Option.some.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i)) (Sigma.mk.{u2, u1} ι (fun (i : ι) => M i) i (FreeProduct.NeWord.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w)))
-Case conversion may be inaccurate. Consider using '#align free_product.neword.to_list_head' FreeProduct.NeWord.toList_head?ₓ'. -/
 @[simp]
 theorem toList_head? {i j} (w : NeWord M i j) : w.toList.head? = Option.some ⟨i, w.headI⟩ :=
   by
@@ -642,12 +525,6 @@ theorem toList_head? {i j} (w : NeWord M i j) : w.toList.head? = Option.some ⟨
   · exact List.head?_append w_ih_w₁
 #align free_product.neword.to_list_head' FreeProduct.NeWord.toList_head?
 
-/- warning: free_product.neword.to_list_last' -> FreeProduct.NeWord.toList_getLast? is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j), Eq.{succ (max u1 u2)} (Option.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (List.getLast?.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (FreeProduct.NeWord.toList.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w)) (Option.some.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) j (FreeProduct.NeWord.last.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w)))
-but is expected to have type
-  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j), Eq.{max (succ u2) (succ u1)} (Option.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (List.getLast?.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i)) (FreeProduct.NeWord.toList.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w)) (Option.some.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i)) (Sigma.mk.{u2, u1} ι (fun (i : ι) => M i) j (FreeProduct.NeWord.last.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w)))
-Case conversion may be inaccurate. Consider using '#align free_product.neword.to_list_last' FreeProduct.NeWord.toList_getLast?ₓ'. -/
 @[simp]
 theorem toList_getLast? {i j} (w : NeWord M i j) : w.toList.getLast? = Option.some ⟨j, w.getLast⟩ :=
   by
@@ -684,12 +561,6 @@ def toWord {i j} (w : NeWord M i j) : Word M
 #align free_product.neword.to_word FreeProduct.NeWord.toWord
 -/
 
-/- warning: free_product.neword.of_word -> FreeProduct.NeWord.of_word is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] (w : FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)), (Ne.{max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) w (FreeProduct.Word.empty.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) -> (Exists.{succ u1} ι (fun (i : ι) => Exists.{succ u1} ι (fun (j : ι) => Exists.{succ (max u1 u2)} (FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j) (fun (w' : FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j) => Eq.{max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.NeWord.toWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w') w))))
-but is expected to have type
-  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] (w : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)), (Ne.{max (succ u2) (succ u1)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) w (FreeProduct.Word.empty.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) -> (Exists.{succ u2} ι (fun (i : ι) => Exists.{succ u2} ι (fun (j : ι) => Exists.{max (succ u2) (succ u1)} (FreeProduct.NeWord.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j) (fun (w' : FreeProduct.NeWord.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j) => Eq.{max (succ u2) (succ u1)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.NeWord.toWord.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w') w))))
-Case conversion may be inaccurate. Consider using '#align free_product.neword.of_word FreeProduct.NeWord.of_wordₓ'. -/
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
 /-- Every nonempty `word M` can be constructed as a `neword M i j` -/
 theorem of_word (w : Word M) (h : w ≠ Empty) : ∃ (i j : _)(w' : NeWord M i j), w'.toWord = w :=
@@ -718,80 +589,38 @@ def prod {i j} (w : NeWord M i j) :=
 #align free_product.neword.prod FreeProduct.NeWord.prod
 -/
 
-/- warning: free_product.neword.singleton_head -> FreeProduct.NeWord.singleton_head is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} (x : M i) (hne_one : Ne.{succ u2} (M i) x (OfNat.ofNat.{u2} (M i) 1 (OfNat.mk.{u2} (M i) 1 (One.one.{u2} (M i) (MulOneClass.toHasOne.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))))))), Eq.{succ u2} (M i) (FreeProduct.NeWord.head.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i i (FreeProduct.NeWord.singleton.{u1, u2} ι M (fun {i : ι} => _inst_1 i) i x hne_one)) x
-but is expected to have type
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} (x : M i) (hne_one : Ne.{succ u2} (M i) x (OfNat.ofNat.{u2} (M i) 1 (One.toOfNat1.{u2} (M i) (Monoid.toOne.{u2} (M i) (_inst_1 i))))), Eq.{succ u2} (M i) (FreeProduct.NeWord.head.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i i (FreeProduct.NeWord.singleton.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i x hne_one)) x
-Case conversion may be inaccurate. Consider using '#align free_product.neword.singleton_head FreeProduct.NeWord.singleton_headₓ'. -/
 @[simp]
 theorem singleton_head {i} (x : M i) (hne_one : x ≠ 1) : (singleton x hne_one).headI = x :=
   rfl
 #align free_product.neword.singleton_head FreeProduct.NeWord.singleton_head
 
-/- warning: free_product.neword.singleton_last -> FreeProduct.NeWord.singleton_last is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} (x : M i) (hne_one : Ne.{succ u2} (M i) x (OfNat.ofNat.{u2} (M i) 1 (OfNat.mk.{u2} (M i) 1 (One.one.{u2} (M i) (MulOneClass.toHasOne.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))))))), Eq.{succ u2} (M i) (FreeProduct.NeWord.last.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i i (FreeProduct.NeWord.singleton.{u1, u2} ι M (fun {i : ι} => _inst_1 i) i x hne_one)) x
-but is expected to have type
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} (x : M i) (hne_one : Ne.{succ u2} (M i) x (OfNat.ofNat.{u2} (M i) 1 (One.toOfNat1.{u2} (M i) (Monoid.toOne.{u2} (M i) (_inst_1 i))))), Eq.{succ u2} (M i) (FreeProduct.NeWord.last.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i i (FreeProduct.NeWord.singleton.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i x hne_one)) x
-Case conversion may be inaccurate. Consider using '#align free_product.neword.singleton_last FreeProduct.NeWord.singleton_lastₓ'. -/
 @[simp]
 theorem singleton_last {i} (x : M i) (hne_one : x ≠ 1) : (singleton x hne_one).getLast = x :=
   rfl
 #align free_product.neword.singleton_last FreeProduct.NeWord.singleton_last
 
-/- warning: free_product.neword.prod_singleton -> FreeProduct.NeWord.prod_singleton is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} (x : M i) (hne_one : Ne.{succ u2} (M i) x (OfNat.ofNat.{u2} (M i) 1 (OfNat.mk.{u2} (M i) 1 (One.one.{u2} (M i) (MulOneClass.toHasOne.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))))))), Eq.{succ (max u1 u2)} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.NeWord.prod.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i i (FreeProduct.NeWord.singleton.{u1, u2} ι M (fun {i : ι} => _inst_1 i) i x hne_one)) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) x)
-but is expected to have type
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} (x : M i) (hne_one : Ne.{succ u2} (M i) x (OfNat.ofNat.{u2} (M i) 1 (One.toOfNat1.{u2} (M i) (Monoid.toOne.{u2} (M i) (_inst_1 i))))), Eq.{max (succ u1) (succ u2)} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.NeWord.prod.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i i (FreeProduct.NeWord.singleton.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i x hne_one)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, max (succ u2) (succ u1)} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) x)
-Case conversion may be inaccurate. Consider using '#align free_product.neword.prod_singleton FreeProduct.NeWord.prod_singletonₓ'. -/
 @[simp]
 theorem prod_singleton {i} (x : M i) (hne_one : x ≠ 1) : (singleton x hne_one).Prod = of x := by
   simp [to_word, Prod, word.prod]
 #align free_product.neword.prod_singleton FreeProduct.NeWord.prod_singleton
 
-/- warning: free_product.neword.append_head -> FreeProduct.NeWord.append_head is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} {j : ι} {k : ι} {l : ι} {w₁ : FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j} {hne : Ne.{succ u1} ι j k} {w₂ : FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) k l}, Eq.{succ u2} (M i) (FreeProduct.NeWord.head.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i l (FreeProduct.NeWord.append.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j k l w₁ hne w₂)) (FreeProduct.NeWord.head.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w₁)
-but is expected to have type
-  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] {i : ι} {j : ι} {k : ι} {l : ι} {w₁ : FreeProduct.NeWord.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j} {hne : Ne.{succ u2} ι j k} {w₂ : FreeProduct.NeWord.{u2, u1} ι M (fun (i : ι) => _inst_1 i) k l}, Eq.{succ u1} (M i) (FreeProduct.NeWord.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i l (FreeProduct.NeWord.append.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j k l w₁ hne w₂)) (FreeProduct.NeWord.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w₁)
-Case conversion may be inaccurate. Consider using '#align free_product.neword.append_head FreeProduct.NeWord.append_headₓ'. -/
 @[simp]
 theorem append_head {i j k l} {w₁ : NeWord M i j} {hne : j ≠ k} {w₂ : NeWord M k l} :
     (append w₁ hne w₂).headI = w₁.headI :=
   rfl
 #align free_product.neword.append_head FreeProduct.NeWord.append_head
 
-/- warning: free_product.neword.append_last -> FreeProduct.NeWord.append_last is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} {j : ι} {k : ι} {l : ι} {w₁ : FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j} {hne : Ne.{succ u1} ι j k} {w₂ : FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) k l}, Eq.{succ u2} (M l) (FreeProduct.NeWord.last.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i l (FreeProduct.NeWord.append.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j k l w₁ hne w₂)) (FreeProduct.NeWord.last.{u1, u2} ι M (fun (i : ι) => _inst_1 i) k l w₂)
-but is expected to have type
-  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] {i : ι} {j : ι} {k : ι} {l : ι} {w₁ : FreeProduct.NeWord.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j} {hne : Ne.{succ u2} ι j k} {w₂ : FreeProduct.NeWord.{u2, u1} ι M (fun (i : ι) => _inst_1 i) k l}, Eq.{succ u1} (M l) (FreeProduct.NeWord.last.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i l (FreeProduct.NeWord.append.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j k l w₁ hne w₂)) (FreeProduct.NeWord.last.{u2, u1} ι M (fun (i : ι) => _inst_1 i) k l w₂)
-Case conversion may be inaccurate. Consider using '#align free_product.neword.append_last FreeProduct.NeWord.append_lastₓ'. -/
 @[simp]
 theorem append_last {i j k l} {w₁ : NeWord M i j} {hne : j ≠ k} {w₂ : NeWord M k l} :
     (append w₁ hne w₂).getLast = w₂.getLast :=
   rfl
 #align free_product.neword.append_last FreeProduct.NeWord.append_last
 
-/- warning: free_product.neword.append_prod -> FreeProduct.NeWord.append_prod is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} {j : ι} {k : ι} {l : ι} {w₁ : FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j} {hne : Ne.{succ u1} ι j k} {w₂ : FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) k l}, Eq.{succ (max u1 u2)} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.NeWord.prod.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i l (FreeProduct.NeWord.append.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j k l w₁ hne w₂)) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instHMul.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toHasMul.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i))))) (FreeProduct.NeWord.prod.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w₁) (FreeProduct.NeWord.prod.{u1, u2} ι M (fun (i : ι) => _inst_1 i) k l w₂))
-but is expected to have type
-  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] {i : ι} {j : ι} {k : ι} {l : ι} {w₁ : FreeProduct.NeWord.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j} {hne : Ne.{succ u2} ι j k} {w₂ : FreeProduct.NeWord.{u2, u1} ι M (fun (i : ι) => _inst_1 i) k l}, Eq.{max (succ u2) (succ u1)} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.NeWord.prod.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i l (FreeProduct.NeWord.append.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j k l w₁ hne w₂)) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instHMul.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))))) (FreeProduct.NeWord.prod.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w₁) (FreeProduct.NeWord.prod.{u2, u1} ι M (fun (i : ι) => _inst_1 i) k l w₂))
-Case conversion may be inaccurate. Consider using '#align free_product.neword.append_prod FreeProduct.NeWord.append_prodₓ'. -/
 @[simp]
 theorem append_prod {i j k l} {w₁ : NeWord M i j} {hne : j ≠ k} {w₂ : NeWord M k l} :
     (append w₁ hne w₂).Prod = w₁.Prod * w₂.Prod := by simp [to_word, Prod, word.prod]
 #align free_product.neword.append_prod FreeProduct.NeWord.append_prod
 
-/- warning: free_product.neword.replace_head -> FreeProduct.NeWord.replaceHead is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} {j : ι} (x : M i), (Ne.{succ u2} (M i) x (OfNat.ofNat.{u2} (M i) 1 (OfNat.mk.{u2} (M i) 1 (One.one.{u2} (M i) (MulOneClass.toHasOne.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))))))) -> (FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j) -> (FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j)
-but is expected to have type
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} {j : ι} (x : M i), (Ne.{succ u2} (M i) x (OfNat.ofNat.{u2} (M i) 1 (One.toOfNat1.{u2} (M i) (Monoid.toOne.{u2} (M i) (_inst_1 i))))) -> (FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j) -> (FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j)
-Case conversion may be inaccurate. Consider using '#align free_product.neword.replace_head FreeProduct.NeWord.replaceHeadₓ'. -/
 /-- One can replace the first letter in a non-empty reduced word by an element of the same
 group -/
 def replaceHead : ∀ {i j : ι} (x : M i) (hnotone : x ≠ 1) (w : NeWord M i j), NeWord M i j
@@ -799,46 +628,22 @@ def replaceHead : ∀ {i j : ι} (x : M i) (hnotone : x ≠ 1) (w : NeWord M i j
   | _, _, x, h, append w₁ hne w₂ => append (replace_head x h w₁) hne w₂
 #align free_product.neword.replace_head FreeProduct.NeWord.replaceHead
 
-/- warning: free_product.neword.replace_head_head -> FreeProduct.NeWord.replaceHead_head is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} {j : ι} (x : M i) (hnotone : Ne.{succ u2} (M i) x (OfNat.ofNat.{u2} (M i) 1 (OfNat.mk.{u2} (M i) 1 (One.one.{u2} (M i) (MulOneClass.toHasOne.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))))))) (w : FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j), Eq.{succ u2} (M i) (FreeProduct.NeWord.head.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j (FreeProduct.NeWord.replaceHead.{u1, u2} ι M (fun {i : ι} => _inst_1 i) i j x hnotone w)) x
-but is expected to have type
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} {j : ι} (x : M i) (hnotone : Ne.{succ u2} (M i) x (OfNat.ofNat.{u2} (M i) 1 (One.toOfNat1.{u2} (M i) (Monoid.toOne.{u2} (M i) (_inst_1 i))))) (w : FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j), Eq.{succ u2} (M i) (FreeProduct.NeWord.head.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j (FreeProduct.NeWord.replaceHead.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j x hnotone w)) x
-Case conversion may be inaccurate. Consider using '#align free_product.neword.replace_head_head FreeProduct.NeWord.replaceHead_headₓ'. -/
 @[simp]
 theorem replaceHead_head {i j : ι} (x : M i) (hnotone : x ≠ 1) (w : NeWord M i j) :
     (replaceHead x hnotone w).headI = x := by induction w; rfl; exact w_ih_w₁ _ _
 #align free_product.neword.replace_head_head FreeProduct.NeWord.replaceHead_head
 
-/- warning: free_product.neword.mul_head -> FreeProduct.NeWord.mulHead is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j) (x : M i), (Ne.{succ u2} (M i) (HMul.hMul.{u2, u2, u2} (M i) (M i) (M i) (instHMul.{u2} (M i) (MulOneClass.toHasMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)))) x (FreeProduct.NeWord.head.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w)) (OfNat.ofNat.{u2} (M i) 1 (OfNat.mk.{u2} (M i) 1 (One.one.{u2} (M i) (MulOneClass.toHasOne.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))))))) -> (FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j)
-but is expected to have type
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j) (x : M i), (Ne.{succ u2} (M i) (HMul.hMul.{u2, u2, u2} (M i) (M i) (M i) (instHMul.{u2} (M i) (MulOneClass.toMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)))) x (FreeProduct.NeWord.head.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w)) (OfNat.ofNat.{u2} (M i) 1 (One.toOfNat1.{u2} (M i) (Monoid.toOne.{u2} (M i) (_inst_1 i))))) -> (FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j)
-Case conversion may be inaccurate. Consider using '#align free_product.neword.mul_head FreeProduct.NeWord.mulHeadₓ'. -/
 /-- One can multiply an element from the left to a non-empty reduced word if it does not cancel
 with the first element in the word. -/
 def mulHead {i j : ι} (w : NeWord M i j) (x : M i) (hnotone : x * w.headI ≠ 1) : NeWord M i j :=
   replaceHead (x * w.headI) hnotone w
 #align free_product.neword.mul_head FreeProduct.NeWord.mulHead
 
-/- warning: free_product.neword.mul_head_head -> FreeProduct.NeWord.mulHead_head is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j) (x : M i) (hnotone : Ne.{succ u2} (M i) (HMul.hMul.{u2, u2, u2} (M i) (M i) (M i) (instHMul.{u2} (M i) (MulOneClass.toHasMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)))) x (FreeProduct.NeWord.head.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w)) (OfNat.ofNat.{u2} (M i) 1 (OfNat.mk.{u2} (M i) 1 (One.one.{u2} (M i) (MulOneClass.toHasOne.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))))))), Eq.{succ u2} (M i) (FreeProduct.NeWord.head.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j (FreeProduct.NeWord.mulHead.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w x hnotone)) (HMul.hMul.{u2, u2, u2} (M i) (M i) (M i) (instHMul.{u2} (M i) (MulOneClass.toHasMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)))) x (FreeProduct.NeWord.head.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w))
-but is expected to have type
-  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j) (x : M i) (hnotone : Ne.{succ u1} (M i) (HMul.hMul.{u1, u1, u1} (M i) (M i) (M i) (instHMul.{u1} (M i) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)))) x (FreeProduct.NeWord.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w)) (OfNat.ofNat.{u1} (M i) 1 (One.toOfNat1.{u1} (M i) (Monoid.toOne.{u1} (M i) (_inst_1 i))))), Eq.{succ u1} (M i) (FreeProduct.NeWord.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j (FreeProduct.NeWord.mulHead.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w x hnotone)) (HMul.hMul.{u1, u1, u1} (M i) (M i) (M i) (instHMul.{u1} (M i) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)))) x (FreeProduct.NeWord.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w))
-Case conversion may be inaccurate. Consider using '#align free_product.neword.mul_head_head FreeProduct.NeWord.mulHead_headₓ'. -/
 @[simp]
 theorem mulHead_head {i j : ι} (w : NeWord M i j) (x : M i) (hnotone : x * w.headI ≠ 1) :
     (mulHead w x hnotone).headI = x * w.headI := by induction w; rfl; exact w_ih_w₁ _ _
 #align free_product.neword.mul_head_head FreeProduct.NeWord.mulHead_head
 
-/- warning: free_product.neword.mul_head_prod -> FreeProduct.NeWord.mulHead_prod is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j) (x : M i) (hnotone : Ne.{succ u2} (M i) (HMul.hMul.{u2, u2, u2} (M i) (M i) (M i) (instHMul.{u2} (M i) (MulOneClass.toHasMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)))) x (FreeProduct.NeWord.head.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w)) (OfNat.ofNat.{u2} (M i) 1 (OfNat.mk.{u2} (M i) 1 (One.one.{u2} (M i) (MulOneClass.toHasOne.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))))))), Eq.{succ (max u1 u2)} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.NeWord.prod.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j (FreeProduct.NeWord.mulHead.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w x hnotone)) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instHMul.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toHasMul.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i))))) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) x) (FreeProduct.NeWord.prod.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w))
-but is expected to have type
-  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j) (x : M i) (hnotone : Ne.{succ u1} (M i) (HMul.hMul.{u1, u1, u1} (M i) (M i) (M i) (instHMul.{u1} (M i) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)))) x (FreeProduct.NeWord.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w)) (OfNat.ofNat.{u1} (M i) 1 (One.toOfNat1.{u1} (M i) (Monoid.toOne.{u1} (M i) (_inst_1 i))))), Eq.{max (succ u2) (succ u1)} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.NeWord.prod.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j (FreeProduct.NeWord.mulHead.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w x hnotone)) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) x) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) x) (instHMul.{max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) x) (MulOneClass.toMul.{max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) x) (Monoid.toMulOneClass.{max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) x) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) x) (FreeProduct.NeWord.prod.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w))
-Case conversion may be inaccurate. Consider using '#align free_product.neword.mul_head_prod FreeProduct.NeWord.mulHead_prodₓ'. -/
 @[simp]
 theorem mulHead_prod {i j : ι} (w : NeWord M i j) (x : M i) (hnotone : x * w.headI ≠ 1) :
     (mulHead w x hnotone).Prod = of x * w.Prod :=
@@ -863,34 +668,16 @@ def inv : ∀ {i j} (w : NeWord G i j), NeWord G j i
 #align free_product.neword.inv FreeProduct.NeWord.inv
 -/
 
-/- warning: free_product.neword.inv_prod -> FreeProduct.NeWord.inv_prod is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {G : ι -> Type.{u2}} [_inst_3 : forall (i : ι), Group.{u2} (G i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) i j), Eq.{succ (max u1 u2)} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.NeWord.prod.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) j i (FreeProduct.NeWord.inv.{u1, u2} ι G (fun (i : ι) => _inst_3 i) i j w)) (Inv.inv.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.hasInv.{u1, u2} ι G (fun (i : ι) => _inst_3 i)) (FreeProduct.NeWord.prod.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) i j w))
-but is expected to have type
-  forall {ι : Type.{u2}} {G : ι -> Type.{u1}} [_inst_3 : forall (i : ι), Group.{u1} (G i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i j), Eq.{max (succ u2) (succ u1)} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (FreeProduct.NeWord.prod.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) j i (FreeProduct.NeWord.inv.{u2, u1} ι G (fun (i : ι) => _inst_3 i) i j w)) (Inv.inv.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (FreeProduct.instInvFreeProductToMonoidToDivInvMonoid.{u2, u1} ι G (fun (i : ι) => _inst_3 i)) (FreeProduct.NeWord.prod.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i j w))
-Case conversion may be inaccurate. Consider using '#align free_product.neword.inv_prod FreeProduct.NeWord.inv_prodₓ'. -/
 @[simp]
 theorem inv_prod {i j} (w : NeWord G i j) : w.inv.Prod = w.Prod⁻¹ := by
   induction w <;> simp [inv, *]
 #align free_product.neword.inv_prod FreeProduct.NeWord.inv_prod
 
-/- warning: free_product.neword.inv_head -> FreeProduct.NeWord.inv_head is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {G : ι -> Type.{u2}} [_inst_3 : forall (i : ι), Group.{u2} (G i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) i j), Eq.{succ u2} (G j) (FreeProduct.NeWord.head.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) j i (FreeProduct.NeWord.inv.{u1, u2} ι G (fun (i : ι) => _inst_3 i) i j w)) (Inv.inv.{u2} (G j) (DivInvMonoid.toHasInv.{u2} (G j) (Group.toDivInvMonoid.{u2} (G j) (_inst_3 j))) (FreeProduct.NeWord.last.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) i j w))
-but is expected to have type
-  forall {ι : Type.{u2}} {G : ι -> Type.{u1}} [_inst_3 : forall (i : ι), Group.{u1} (G i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i j), Eq.{succ u1} (G j) (FreeProduct.NeWord.head.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) j i (FreeProduct.NeWord.inv.{u2, u1} ι G (fun (i : ι) => _inst_3 i) i j w)) (Inv.inv.{u1} (G j) (InvOneClass.toInv.{u1} (G j) (DivInvOneMonoid.toInvOneClass.{u1} (G j) (DivisionMonoid.toDivInvOneMonoid.{u1} (G j) (Group.toDivisionMonoid.{u1} (G j) (_inst_3 j))))) (FreeProduct.NeWord.last.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i j w))
-Case conversion may be inaccurate. Consider using '#align free_product.neword.inv_head FreeProduct.NeWord.inv_headₓ'. -/
 @[simp]
 theorem inv_head {i j} (w : NeWord G i j) : w.inv.headI = w.getLast⁻¹ := by
   induction w <;> simp [inv, *]
 #align free_product.neword.inv_head FreeProduct.NeWord.inv_head
 
-/- warning: free_product.neword.inv_last -> FreeProduct.NeWord.inv_last is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {G : ι -> Type.{u2}} [_inst_3 : forall (i : ι), Group.{u2} (G i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) i j), Eq.{succ u2} (G i) (FreeProduct.NeWord.last.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) j i (FreeProduct.NeWord.inv.{u1, u2} ι G (fun (i : ι) => _inst_3 i) i j w)) (Inv.inv.{u2} (G i) (DivInvMonoid.toHasInv.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) (FreeProduct.NeWord.head.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) i j w))
-but is expected to have type
-  forall {ι : Type.{u2}} {G : ι -> Type.{u1}} [_inst_3 : forall (i : ι), Group.{u1} (G i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i j), Eq.{succ u1} (G i) (FreeProduct.NeWord.last.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) j i (FreeProduct.NeWord.inv.{u2, u1} ι G (fun (i : ι) => _inst_3 i) i j w)) (Inv.inv.{u1} (G i) (InvOneClass.toInv.{u1} (G i) (DivInvOneMonoid.toInvOneClass.{u1} (G i) (DivisionMonoid.toDivInvOneMonoid.{u1} (G i) (Group.toDivisionMonoid.{u1} (G i) (_inst_3 i))))) (FreeProduct.NeWord.head.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i j w))
-Case conversion may be inaccurate. Consider using '#align free_product.neword.inv_last FreeProduct.NeWord.inv_lastₓ'. -/
 @[simp]
 theorem inv_last {i j} (w : NeWord G i j) : w.inv.getLast = w.headI⁻¹ := by
   induction w <;> simp [inv, *]
@@ -930,9 +717,6 @@ variable (hpp : Pairwise fun i j => ∀ h : H i, h ≠ 1 → f i h • X j ⊆ X
 
 include hpp
 
-/- warning: free_product.lift_word_ping_pong -> FreeProduct.lift_word_ping_pong is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align free_product.lift_word_ping_pong FreeProduct.lift_word_ping_pongₓ'. -/
 theorem lift_word_ping_pong {i j k} (w : NeWord H i j) (hk : j ≠ k) : lift f w.Prod • X k ⊆ X i :=
   by
   rename' i => i', j => j', k => m, hk => hm
@@ -949,9 +733,6 @@ theorem lift_word_ping_pong {i j k} (w : NeWord H i j) (hk : j ≠ k) : lift f w
 
 include X hXnonempty hXdisj
 
-/- warning: free_product.lift_word_prod_nontrivial_of_other_i -> FreeProduct.lift_word_prod_nontrivial_of_other_i is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align free_product.lift_word_prod_nontrivial_of_other_i FreeProduct.lift_word_prod_nontrivial_of_other_iₓ'. -/
 theorem lift_word_prod_nontrivial_of_other_i {i j k} (w : NeWord H i j) (hhead : k ≠ i)
     (hlast : k ≠ j) : lift f w.Prod ≠ 1 := by
   intro heq1
@@ -962,18 +743,12 @@ theorem lift_word_prod_nontrivial_of_other_i {i j k} (w : NeWord H i j) (hhead :
 
 include hnontriv
 
-/- warning: free_product.lift_word_prod_nontrivial_of_head_eq_last -> FreeProduct.lift_word_prod_nontrivial_of_head_eq_last is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align free_product.lift_word_prod_nontrivial_of_head_eq_last FreeProduct.lift_word_prod_nontrivial_of_head_eq_lastₓ'. -/
 theorem lift_word_prod_nontrivial_of_head_eq_last {i} (w : NeWord H i i) : lift f w.Prod ≠ 1 :=
   by
   obtain ⟨k, hk⟩ := exists_ne i
   exact lift_word_prod_nontrivial_of_other_i f X hXnonempty hXdisj hpp w hk hk
 #align free_product.lift_word_prod_nontrivial_of_head_eq_last FreeProduct.lift_word_prod_nontrivial_of_head_eq_last
 
-/- warning: free_product.lift_word_prod_nontrivial_of_head_card -> FreeProduct.lift_word_prod_nontrivial_of_head_card is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align free_product.lift_word_prod_nontrivial_of_head_card FreeProduct.lift_word_prod_nontrivial_of_head_cardₓ'. -/
 theorem lift_word_prod_nontrivial_of_head_card {i j} (w : NeWord H i j) (hcard : 3 ≤ (#H i))
     (hheadtail : i ≠ j) : lift f w.Prod ≠ 1 :=
   by
@@ -989,9 +764,6 @@ theorem lift_word_prod_nontrivial_of_head_card {i j} (w : NeWord H i j) (hcard :
 
 include hcard
 
-/- warning: free_product.lift_word_prod_nontrivial_of_not_empty -> FreeProduct.lift_word_prod_nontrivial_of_not_empty is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align free_product.lift_word_prod_nontrivial_of_not_empty FreeProduct.lift_word_prod_nontrivial_of_not_emptyₓ'. -/
 theorem lift_word_prod_nontrivial_of_not_empty {i j} (w : NeWord H i j) : lift f w.Prod ≠ 1 := by
   classical
     cases hcard
@@ -1020,9 +792,6 @@ theorem lift_word_prod_nontrivial_of_not_empty {i j} (w : NeWord H i j) : lift f
         intro heq1; apply hw'; simp [w', heq1]
 #align free_product.lift_word_prod_nontrivial_of_not_empty FreeProduct.lift_word_prod_nontrivial_of_not_empty
 
-/- warning: free_product.empty_of_word_prod_eq_one -> FreeProduct.empty_of_word_prod_eq_one is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align free_product.empty_of_word_prod_eq_one FreeProduct.empty_of_word_prod_eq_oneₓ'. -/
 theorem empty_of_word_prod_eq_one {w : Word H} (h : lift f w.Prod = 1) : w = Word.empty :=
   by
   by_contra hnotempty
@@ -1030,9 +799,6 @@ theorem empty_of_word_prod_eq_one {w : Word H} (h : lift f w.Prod = 1) : w = Wor
   exact lift_word_prod_nontrivial_of_not_empty f hcard X hXnonempty hXdisj hpp w h
 #align free_product.empty_of_word_prod_eq_one FreeProduct.empty_of_word_prod_eq_one
 
-/- warning: free_product.lift_injective_of_ping_pong -> FreeProduct.lift_injective_of_ping_pong is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align free_product.lift_injective_of_ping_pong FreeProduct.lift_injective_of_ping_pongₓ'. -/
 /-- The Ping-Pong-Lemma.
 
 Given a group action of `G` on `X` so that the `H i` acts in a specific way on disjoint subsets
@@ -1074,12 +840,6 @@ instance {ι : Type _} (G : ι → Type _) [∀ i, Group (G i)] [hG : ∀ i, IsF
           G i →* FreeGroup (Σi, IsFreeGroup.Generators (G i))))
       (by ext; simp) (by ext; simp)
 
-/- warning: free_group_equiv_free_product -> freeGroupEquivFreeProduct is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}}, MulEquiv.{u1, u1} (FreeGroup.{u1} ι) (FreeProduct.{u1, 0} ι (fun (_x : ι) => FreeGroup.{0} Unit) (fun (i : ι) => DivInvMonoid.toMonoid.{0} (FreeGroup.{0} Unit) (Group.toDivInvMonoid.{0} (FreeGroup.{0} Unit) (FreeGroup.group.{0} Unit)))) (FreeGroup.hasMul.{u1} ι) (MulOneClass.toHasMul.{u1} (FreeProduct.{u1, 0} ι (fun (_x : ι) => FreeGroup.{0} Unit) (fun (i : ι) => DivInvMonoid.toMonoid.{0} (FreeGroup.{0} Unit) (Group.toDivInvMonoid.{0} (FreeGroup.{0} Unit) (FreeGroup.group.{0} Unit)))) (Monoid.toMulOneClass.{u1} (FreeProduct.{u1, 0} ι (fun (_x : ι) => FreeGroup.{0} Unit) (fun (i : ι) => DivInvMonoid.toMonoid.{0} (FreeGroup.{0} Unit) (Group.toDivInvMonoid.{0} (FreeGroup.{0} Unit) (FreeGroup.group.{0} Unit)))) (FreeProduct.monoid.{u1, 0} ι (fun (_x : ι) => FreeGroup.{0} Unit) (fun (i : ι) => DivInvMonoid.toMonoid.{0} (FreeGroup.{0} Unit) (Group.toDivInvMonoid.{0} (FreeGroup.{0} Unit) (FreeGroup.group.{0} Unit))))))
-but is expected to have type
-  forall {ι : Type.{u1}}, MulEquiv.{u1, u1} (FreeGroup.{u1} ι) (FreeProduct.{u1, 0} ι (fun (_x : ι) => FreeGroup.{0} Unit) (fun (i : ι) => DivInvMonoid.toMonoid.{0} ((fun (x._@.Mathlib.GroupTheory.FreeProduct._hyg.10093 : ι) => FreeGroup.{0} Unit) i) (Group.toDivInvMonoid.{0} ((fun (x._@.Mathlib.GroupTheory.FreeProduct._hyg.10093 : ι) => FreeGroup.{0} Unit) i) (FreeGroup.instGroupFreeGroup.{0} Unit)))) (FreeGroup.instMulFreeGroup.{u1} ι) (MulOneClass.toMul.{u1} (FreeProduct.{u1, 0} ι (fun (_x : ι) => FreeGroup.{0} Unit) (fun (i : ι) => DivInvMonoid.toMonoid.{0} ((fun (x._@.Mathlib.GroupTheory.FreeProduct._hyg.10093 : ι) => FreeGroup.{0} Unit) i) (Group.toDivInvMonoid.{0} ((fun (x._@.Mathlib.GroupTheory.FreeProduct._hyg.10093 : ι) => FreeGroup.{0} Unit) i) (FreeGroup.instGroupFreeGroup.{0} Unit)))) (Monoid.toMulOneClass.{u1} (FreeProduct.{u1, 0} ι (fun (_x : ι) => FreeGroup.{0} Unit) (fun (i : ι) => DivInvMonoid.toMonoid.{0} ((fun (x._@.Mathlib.GroupTheory.FreeProduct._hyg.10093 : ι) => FreeGroup.{0} Unit) i) (Group.toDivInvMonoid.{0} ((fun (x._@.Mathlib.GroupTheory.FreeProduct._hyg.10093 : ι) => FreeGroup.{0} Unit) i) (FreeGroup.instGroupFreeGroup.{0} Unit)))) (instMonoidFreeProduct.{u1, 0} ι (fun (_x : ι) => FreeGroup.{0} Unit) (fun (i : ι) => DivInvMonoid.toMonoid.{0} ((fun (x._@.Mathlib.GroupTheory.FreeProduct._hyg.10093 : ι) => FreeGroup.{0} Unit) i) (Group.toDivInvMonoid.{0} ((fun (x._@.Mathlib.GroupTheory.FreeProduct._hyg.10093 : ι) => FreeGroup.{0} Unit) i) (FreeGroup.instGroupFreeGroup.{0} Unit))))))
-Case conversion may be inaccurate. Consider using '#align free_group_equiv_free_product freeGroupEquivFreeProductₓ'. -/
 -- NB: One might expect this theorem to be phrased with ℤ, but ℤ is an additive group,
 -- and using `multiplicative ℤ` runs into diamond issues.
 /-- A free group is a free product of copies of the free_group over one generator. -/
@@ -1121,9 +881,6 @@ variable (hY : ∀ i, a⁻¹ i • X iᶜ ⊆ Y i)
 
 include hXnonempty hXdisj hYdisj hXYdisj hX hY
 
-/- warning: free_group.injective_lift_of_ping_pong -> FreeGroup.injective_lift_of_ping_pong is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align free_group.injective_lift_of_ping_pong FreeGroup.injective_lift_of_ping_pongₓ'. -/
 /-- The Ping-Pong-Lemma.
 
 Given a group action of `G` on `X` so that the generators of the free groups act in specific
Diff
@@ -173,12 +173,10 @@ def lift : (∀ i, M i →* N) ≃ (FreeProduct M →* N)
             simp only [MonoidHom.map_mul, FreeMonoid.lift_eval_of])
   invFun f i := f.comp of
   left_inv := by
-    intro fi
-    ext (i x)
+    intro fi; ext (i x)
     rw [MonoidHom.comp_apply, of_apply, Con.lift_mk', FreeMonoid.lift_eval_of]
   right_inv := by
-    intro f
-    ext (i x)
+    intro f; ext (i x)
     simp only [MonoidHom.comp_apply, of_apply, Con.lift_mk', FreeMonoid.lift_eval_of]
 #align free_product.lift FreeProduct.lift
 
@@ -235,10 +233,8 @@ theorem lift_mrange_le {N} [Monoid N] (f : ∀ i, M i →* N) {s : Submonoid N}
   rintro _ ⟨x, rfl⟩
   induction' x using FreeProduct.induction_on with i x x y hx hy
   · exact s.one_mem
-  · simp only [lift_of, SetLike.mem_coe]
-    exact h i (Set.mem_range_self x)
-  · simp only [map_mul, SetLike.mem_coe]
-    exact s.mul_mem hx hy
+  · simp only [lift_of, SetLike.mem_coe]; exact h i (Set.mem_range_self x)
+  · simp only [map_mul, SetLike.mem_coe]; exact s.mul_mem hx hy
 #align free_product.lift_mrange_le FreeProduct.lift_mrange_le
 
 #print FreeProduct.mrange_eq_iSup /-
@@ -276,9 +272,7 @@ instance : Group (FreeProduct G) :=
       rw [inv_def]
       apply m.induction_on
       · rw [MonoidHom.map_one, MulOpposite.unop_one, one_mul]
-      · intro i m
-        change of m⁻¹ * of m = 1
-        rw [← of.map_mul, mul_left_inv, of.map_one]
+      · intro i m; change of m⁻¹ * of m = 1; rw [← of.map_mul, mul_left_inv, of.map_one]
       · intro x y hx hy
         rw [MonoidHom.map_mul, MulOpposite.unop_mul, mul_assoc, ← mul_assoc _ x y, hx, one_mul,
           hy] }
@@ -292,10 +286,8 @@ theorem lift_range_le {N} [Group N] (f : ∀ i, G i →* N) {s : Subgroup N}
   rintro _ ⟨x, rfl⟩
   induction' x using FreeProduct.induction_on with i x x y hx hy
   · exact s.one_mem
-  · simp only [lift_of, SetLike.mem_coe]
-    exact h i (Set.mem_range_self x)
-  · simp only [map_mul, SetLike.mem_coe]
-    exact s.mul_mem hx hy
+  · simp only [lift_of, SetLike.mem_coe]; exact h i (Set.mem_range_self x)
+  · simp only [map_mul, SetLike.mem_coe]; exact s.mul_mem hx hy
 #align free_product.lift_range_le FreeProduct.lift_range_le
 
 #print FreeProduct.range_eq_iSup /-
@@ -391,10 +383,7 @@ def rcons {i} (p : Pair M i) : Word M :=
   if h : p.headI = 1 then p.tail
   else
     { toList := ⟨i, p.headI⟩::p.tail.toList
-      ne_one := by
-        rintro l (rfl | hl)
-        exact h
-        exact p.tail.ne_one l hl
+      ne_one := by rintro l (rfl | hl); exact h; exact p.tail.ne_one l hl
       chain_ne := p.tail.chain_ne.cons' (fstIdx_ne_iff.mp p.fstIdx_ne) }
 #align free_product.word.rcons FreeProduct.Word.rcons
 -/
@@ -412,11 +401,8 @@ private def mk_aux {l} (ls : List (Σi, M i)) (h1 : ∀ l' ∈ l::ls, Sigma.snd
 Case conversion may be inaccurate. Consider using '#align free_product.word.cons_eq_rcons FreeProduct.Word.cons_eq_rconsₓ'. -/
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
 theorem cons_eq_rcons {i} {m : M i} {ls h1 h2} :
-    Word.mk (⟨i, m⟩::ls) h1 h2 = rcons ⟨m, mkAux ls h1 h2, fstIdx_ne_iff.mpr h2.rel_head?⟩ :=
-  by
-  rw [rcons, dif_neg]
-  rfl
-  exact h1 ⟨i, m⟩ (ls.mem_cons_self _)
+    Word.mk (⟨i, m⟩::ls) h1 h2 = rcons ⟨m, mkAux ls h1 h2, fstIdx_ne_iff.mpr h2.rel_head?⟩ := by
+  rw [rcons, dif_neg]; rfl; exact h1 ⟨i, m⟩ (ls.mem_cons_self _)
 #align free_product.word.cons_eq_rcons FreeProduct.Word.cons_eq_rcons
 
 /- warning: free_product.word.prod_rcons -> FreeProduct.Word.prod_rcons is a dubious translation:
@@ -441,22 +427,14 @@ theorem rcons_inj {i} : Function.Injective (rcons : Pair M i → Word M) :=
   by
   rintro ⟨m, w, h⟩ ⟨m', w', h'⟩ he
   by_cases hm : m = 1 <;> by_cases hm' : m' = 1
-  · simp only [rcons, dif_pos hm, dif_pos hm'] at he
-    cc
-  · exfalso
-    simp only [rcons, dif_pos hm, dif_neg hm'] at he
-    rw [he] at h
-    exact h rfl
-  · exfalso
-    simp only [rcons, dif_pos hm', dif_neg hm] at he
-    rw [← he] at h'
-    exact h' rfl
+  · simp only [rcons, dif_pos hm, dif_pos hm'] at he; cc
+  · exfalso; simp only [rcons, dif_pos hm, dif_neg hm'] at he; rw [he] at h; exact h rfl
+  · exfalso; simp only [rcons, dif_pos hm', dif_neg hm] at he; rw [← he] at h'; exact h' rfl
   · have : m = m' ∧ w.to_list = w'.to_list := by
       simpa only [rcons, dif_neg hm, dif_neg hm', true_and_iff, eq_self_iff_true, Subtype.mk_eq_mk,
         heq_iff_eq, ← Subtype.ext_iff_val] using he
     rcases this with ⟨rfl, h⟩
-    congr
-    exact word.ext _ _ h
+    congr ; exact word.ext _ _ h
 #align free_product.word.rcons_inj FreeProduct.Word.rcons_inj
 
 variable [DecidableEq ι]
@@ -513,10 +491,7 @@ theorem equivPair_eq_of_fstIdx_ne {i} {w : Word M} (h : fstIdx w ≠ some i) :
 instance summandAction (i) : MulAction (M i) (Word M)
     where
   smul m w := rcons { equivPair i w with headI := m * (equivPair i w).headI }
-  one_smul w := by
-    simp_rw [one_mul]
-    apply (equiv_pair i).symm_apply_eq.mpr
-    ext <;> rfl
+  one_smul w := by simp_rw [one_mul]; apply (equiv_pair i).symm_apply_eq.mpr; ext <;> rfl
   mul_smul m m' w := by simp only [mul_assoc, ← equiv_pair_symm, Equiv.apply_symm_apply]
 #align free_product.word.summand_action FreeProduct.Word.summandAction
 -/
@@ -568,13 +543,11 @@ Case conversion may be inaccurate. Consider using '#align free_product.word.prod
 theorem prod_smul (m) : ∀ w : Word M, prod (m • w) = m * prod w :=
   by
   apply m.induction_on
-  · intro
-    rw [one_smul, one_mul]
-  · intros
+  · intro ; rw [one_smul, one_mul]
+  · intros ;
     rw [of_smul_def, prod_rcons, of.map_mul, mul_assoc, ← prod_rcons, ← equiv_pair_symm,
       Equiv.symm_apply_apply]
-  · intro x y hx hy w
-    rw [mul_smul, hx, hy, mul_assoc]
+  · intro x y hx hy w; rw [mul_smul, hx, hy, mul_assoc]
 #align free_product.word.prod_smul FreeProduct.Word.prod_smul
 
 #print FreeProduct.Word.equiv /-
@@ -585,11 +558,8 @@ def equiv : FreeProduct M ≃ Word M where
   left_inv m := by dsimp only <;> rw [prod_smul, prod_empty, mul_one]
   right_inv := by
     apply smul_induction
-    · dsimp only
-      rw [prod_empty, one_smul]
-    · dsimp only
-      intro i m w ih
-      rw [prod_smul, mul_smul, ih]
+    · dsimp only; rw [prod_empty, one_smul]
+    · dsimp only; intro i m w ih; rw [prod_smul, mul_smul, ih]
 #align free_product.word.equiv FreeProduct.Word.equiv
 -/
 
@@ -635,12 +605,8 @@ lean 3 declaration is
 but is expected to have type
   forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j), Ne.{max (succ u2) (succ u1)} (List.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeProduct.NeWord.toList.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w) (List.nil.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i)))
 Case conversion may be inaccurate. Consider using '#align free_product.neword.to_list_ne_nil FreeProduct.NeWord.toList_ne_nilₓ'. -/
-theorem toList_ne_nil {i j} (w : NeWord M i j) : w.toList ≠ List.nil :=
-  by
-  induction w
-  · rintro ⟨rfl⟩
-  · apply List.append_ne_nil_of_ne_nil_left
-    assumption
+theorem toList_ne_nil {i j} (w : NeWord M i j) : w.toList ≠ List.nil := by induction w;
+  · rintro ⟨rfl⟩; · apply List.append_ne_nil_of_ne_nil_left; assumption
 #align free_product.neword.to_list_ne_nil FreeProduct.NeWord.toList_ne_nil
 
 #print FreeProduct.NeWord.head /-
@@ -672,8 +638,7 @@ theorem toList_head? {i j} (w : NeWord M i j) : w.toList.head? = Option.some ⟨
   by
   rw [← Option.mem_def]
   induction w
-  · rw [Option.mem_def]
-    rfl
+  · rw [Option.mem_def]; rfl
   · exact List.head?_append w_ih_w₁
 #align free_product.neword.to_list_head' FreeProduct.NeWord.toList_head?
 
@@ -688,8 +653,7 @@ theorem toList_getLast? {i j} (w : NeWord M i j) : w.toList.getLast? = Option.so
   by
   rw [← Option.mem_def]
   induction w
-  · rw [Option.mem_def]
-    rfl
+  · rw [Option.mem_def]; rfl
   · exact List.getLast?_append w_ih_w₂
 #align free_product.neword.to_list_last' FreeProduct.NeWord.toList_getLast?
 
@@ -702,8 +666,7 @@ def toWord {i j} (w : NeWord M i j) : Word M
     induction w
     · rintro ⟨k, x⟩ ⟨rfl, rfl⟩
       exact w_hne1
-      exfalso
-      apply H
+      exfalso; apply H
     · intro l h
       simp only [to_list, List.mem_append] at h
       cases h
@@ -716,8 +679,7 @@ def toWord {i j} (w : NeWord M i j) : Word M
       intro x hx y hy
       rw [w_w₁.to_list_last', Option.mem_some_iff] at hx
       rw [w_w₂.to_list_head', Option.mem_some_iff] at hy
-      subst hx
-      subst hy
+      subst hx; subst hy
       exact w_hne
 #align free_product.neword.to_word FreeProduct.NeWord.toWord
 -/
@@ -733,9 +695,7 @@ Case conversion may be inaccurate. Consider using '#align free_product.neword.of
 theorem of_word (w : Word M) (h : w ≠ Empty) : ∃ (i j : _)(w' : NeWord M i j), w'.toWord = w :=
   by
   rsuffices ⟨i, j, w, h⟩ : ∃ (i j : _)(w' : neword M i j), w'.to_word.to_list = w.to_list
-  · refine' ⟨i, j, w, _⟩
-    ext
-    rw [h]
+  · refine' ⟨i, j, w, _⟩; ext; rw [h]
   cases' w with l hnot1 hchain
   induction' l with x l hi
   · contradiction
@@ -847,10 +807,7 @@ but is expected to have type
 Case conversion may be inaccurate. Consider using '#align free_product.neword.replace_head_head FreeProduct.NeWord.replaceHead_headₓ'. -/
 @[simp]
 theorem replaceHead_head {i j : ι} (x : M i) (hnotone : x ≠ 1) (w : NeWord M i j) :
-    (replaceHead x hnotone w).headI = x := by
-  induction w
-  rfl
-  exact w_ih_w₁ _ _
+    (replaceHead x hnotone w).headI = x := by induction w; rfl; exact w_ih_w₁ _ _
 #align free_product.neword.replace_head_head FreeProduct.NeWord.replaceHead_head
 
 /- warning: free_product.neword.mul_head -> FreeProduct.NeWord.mulHead is a dubious translation:
@@ -873,11 +830,7 @@ but is expected to have type
 Case conversion may be inaccurate. Consider using '#align free_product.neword.mul_head_head FreeProduct.NeWord.mulHead_headₓ'. -/
 @[simp]
 theorem mulHead_head {i j : ι} (w : NeWord M i j) (x : M i) (hnotone : x * w.headI ≠ 1) :
-    (mulHead w x hnotone).headI = x * w.headI :=
-  by
-  induction w
-  rfl
-  exact w_ih_w₁ _ _
+    (mulHead w x hnotone).headI = x * w.headI := by induction w; rfl; exact w_ih_w₁ _ _
 #align free_product.neword.mul_head_head FreeProduct.NeWord.mulHead_head
 
 /- warning: free_product.neword.mul_head_prod -> FreeProduct.NeWord.mulHead_prod is a dubious translation:
@@ -893,8 +846,7 @@ theorem mulHead_prod {i j : ι} (w : NeWord M i j) (x : M i) (hnotone : x * w.he
   unfold mul_head
   induction w
   · simp [mul_head, replace_head]
-  · specialize w_ih_w₁ _ hnotone
-    clear w_ih_w₂
+  · specialize w_ih_w₁ _ hnotone; clear w_ih_w₂
     simp [replace_head, ← mul_assoc] at *
     congr 1
 #align free_product.neword.mul_head_prod FreeProduct.NeWord.mulHead_prod
@@ -1026,17 +978,13 @@ theorem lift_word_prod_nontrivial_of_head_card {i j} (w : NeWord H i j) (hcard :
     (hheadtail : i ≠ j) : lift f w.Prod ≠ 1 :=
   by
   obtain ⟨h, hn1, hnh⟩ := Cardinal.three_le hcard 1 w.head⁻¹
-  have hnot1 : h * w.head ≠ 1 := by
-    rw [← div_inv_eq_mul]
-    exact div_ne_one_of_ne hnh
+  have hnot1 : h * w.head ≠ 1 := by rw [← div_inv_eq_mul]; exact div_ne_one_of_ne hnh
   let w' : neword H i i :=
     neword.append (neword.mul_head w h hnot1) hheadtail.symm
       (neword.singleton h⁻¹ (inv_ne_one.mpr hn1))
   have hw' : lift f w'.prod ≠ 1 :=
     lift_word_prod_nontrivial_of_head_eq_last f X hXnonempty hXdisj hpp w'
-  intro heq1
-  apply hw'
-  simp [w', heq1]
+  intro heq1; apply hw'; simp [w', heq1]
 #align free_product.lift_word_prod_nontrivial_of_head_card FreeProduct.lift_word_prod_nontrivial_of_head_card
 
 include hcard
@@ -1051,8 +999,7 @@ theorem lift_word_prod_nontrivial_of_not_empty {i j} (w : NeWord H i j) : lift f
       exact lift_word_prod_nontrivial_of_other_i f X hXnonempty hXdisj hpp w h1 h2
     · cases' hcard with k hcard
       by_cases hh : i = k <;> by_cases hl : j = k
-      · subst hh
-        subst hl
+      · subst hh; subst hl
         exact lift_word_prod_nontrivial_of_head_eq_last f X hXnonempty hXdisj hpp w
       · subst hh
         change j ≠ i at hl
@@ -1061,9 +1008,7 @@ theorem lift_word_prod_nontrivial_of_not_empty {i j} (w : NeWord H i j) : lift f
         change i ≠ j at hh
         have : lift f w.inv.prod ≠ 1 :=
           lift_word_prod_nontrivial_of_head_card f X hXnonempty hXdisj hpp w.inv hcard hh.symm
-        intro heq
-        apply this
-        simpa using HEq
+        intro heq; apply this; simpa using HEq
       · change i ≠ k at hh
         change j ≠ k at hl
         obtain ⟨h, hn1, -⟩ := Cardinal.three_le hcard 1 1
@@ -1072,9 +1017,7 @@ theorem lift_word_prod_nontrivial_of_not_empty {i j} (w : NeWord H i j) : lift f
             (neword.singleton h⁻¹ (inv_ne_one.mpr hn1))
         have hw' : lift f w'.prod ≠ 1 :=
           lift_word_prod_nontrivial_of_head_eq_last f X hXnonempty hXdisj hpp w'
-        intro heq1
-        apply hw'
-        simp [w', heq1]
+        intro heq1; apply hw'; simp [w', heq1]
 #align free_product.lift_word_prod_nontrivial_of_not_empty FreeProduct.lift_word_prod_nontrivial_of_not_empty
 
 /- warning: free_product.empty_of_word_prod_eq_one -> FreeProduct.empty_of_word_prod_eq_one is a dubious translation:
@@ -1129,12 +1072,7 @@ instance {ι : Type _} (G : ι → Type _) [∀ i, Group (G i)] [hG : ∀ i, IsF
         (IsFreeGroup.lift fun x : IsFreeGroup.Generators (G i) =>
             FreeGroup.of (⟨i, x⟩ : Σi, IsFreeGroup.Generators (G i)) :
           G i →* FreeGroup (Σi, IsFreeGroup.Generators (G i))))
-      (by
-        ext
-        simp)
-      (by
-        ext
-        simp)
+      (by ext; simp) (by ext; simp)
 
 /- warning: free_group_equiv_free_product -> freeGroupEquivFreeProduct is a dubious translation:
 lean 3 declaration is
@@ -1152,11 +1090,8 @@ def freeGroupEquivFreeProduct {ι : Type u_1} :
   refine' MonoidHom.toMulEquiv _ _ _ _
   exact FreeGroup.lift fun i => @FreeProduct.of ι _ _ i (FreeGroup.of Unit.unit)
   exact FreeProduct.lift fun i => FreeGroup.lift fun pstar => FreeGroup.of i
-  · ext i
-    rfl
-  · ext (i a)
-    cases a
-    rfl
+  · ext i; rfl
+  · ext (i a); cases a; rfl
 #align free_group_equiv_free_product freeGroupEquivFreeProduct
 
 section PingPongLemma
@@ -1206,11 +1141,8 @@ theorem FreeGroup.injective_lift_of_ping_pong : Function.Injective (FreeGroup.li
     FreeGroup.lift a =
       (FreeProduct.lift fun i => FreeGroup.lift fun _ => a i).comp
         (@freeGroupEquivFreeProduct ι).toMonoidHom :=
-    by
-    ext i
-    simp
-  rw [this]
-  clear this
+    by ext i; simp
+  rw [this]; clear this
   refine' Function.Injective.comp _ (MulEquiv.injective _)
   -- Step two: Invoke the ping-pong lemma for free products
   show Function.Injective (lift fun i : ι => FreeGroup.lift fun _ => a i)
@@ -1221,8 +1153,7 @@ theorem FreeGroup.injective_lift_of_ping_pong : Function.Injective (FreeGroup.li
   apply lift_injective_of_ping_pong f _ X'
   show _ ∨ ∃ i, 3 ≤ (#H i)
   · inhabit ι
-    right
-    use Inhabited.default ι
+    right; use Inhabited.default ι
     simp only [H]
     rw [free_group.free_group_unit_equiv_int.cardinal_eq, Cardinal.mk_denumerable]
     apply le_of_lt
@@ -1245,11 +1176,7 @@ theorem FreeGroup.injective_lift_of_ping_pong : Function.Injective (FreeGroup.li
     change FreeGroup.lift (fun _ => a i) (FreeGroup.of () ^ n) • X' j ⊆ X' i
     simp only [map_zpow, FreeGroup.lift.of]
     change a i ^ n • X' j ⊆ X' i
-    have hnne0 : n ≠ 0 := by
-      rintro rfl
-      apply hne1
-      simpa
-    clear hne1
+    have hnne0 : n ≠ 0 := by rintro rfl; apply hne1; simpa; clear hne1
     simp only [X']
     -- Positive and negative powers separately
     cases' (lt_or_gt_of_ne hnne0).symm with hlt hgt
@@ -1259,8 +1186,7 @@ theorem FreeGroup.injective_lift_of_ping_pong : Function.Injective (FreeGroup.li
           smul_set_mono ((hXYdisj j i).union_left <| hYdisj hij.symm).subset_compl_right
         _ ⊆ X i := by
           refine' Int.le_induction _ _ _ h1n
-          · rw [zpow_one]
-            exact hX i
+          · rw [zpow_one]; exact hX i
           · intro n hle hi
             calc
               a i ^ (n + 1) • Y iᶜ = (a i ^ n * a i) • Y iᶜ := by rw [zpow_add, zpow_one]
@@ -1271,16 +1197,13 @@ theorem FreeGroup.injective_lift_of_ping_pong : Function.Injective (FreeGroup.li
               
         _ ⊆ X' i := Set.subset_union_left _ _
         
-    · have h1n : n ≤ -1 := by
-        apply Int.le_of_lt_add_one
-        simpa using hgt
+    · have h1n : n ≤ -1 := by apply Int.le_of_lt_add_one; simpa using hgt
       calc
         a i ^ n • X' j ⊆ a i ^ n • X iᶜ :=
           smul_set_mono ((hXdisj hij.symm).union_left (hXYdisj i j).symm).subset_compl_right
         _ ⊆ Y i := by
           refine' Int.le_induction_down _ _ _ h1n
-          · rw [zpow_neg, zpow_one]
-            exact hY i
+          · rw [zpow_neg, zpow_one]; exact hY i
           · intro n hle hi
             calc
               a i ^ (n - 1) • X iᶜ = (a i ^ n * (a i)⁻¹) • X iᶜ := by rw [zpow_sub, zpow_one]
Diff
@@ -125,10 +125,7 @@ def of {i : ι} : M i →* FreeProduct M
 #align free_product.of FreeProduct.of
 
 /- warning: free_product.of_apply -> FreeProduct.of_apply is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} (m : M i), Eq.{succ (max u1 u2)} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m) (coeFn.{succ (max u1 u2), succ (max u1 u2)} (MonoidHom.{max u1 u2, max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))))))) (conGen.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u1, u2} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i)))))) (Con.mulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i)))))) (conGen.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u1, u2} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i))))) (fun (_x : MonoidHom.{max u1 u2, max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))))))) (conGen.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u1, u2} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i)))))) (Con.mulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i)))))) (conGen.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u1, u2} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i))))) => (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) -> (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))))))) (conGen.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u1, u2} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i))))) (MonoidHom.hasCoeToFun.{max u1 u2, max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))))))) (conGen.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u1, u2} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i)))))) (Con.mulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i)))))) (conGen.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u1, u2} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i))))) (Con.mk'.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i)))))) (conGen.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u1, u2} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (FreeMonoid.of.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i)) (Sigma.mk.{u1, u2} ι (fun {i : ι} => M i) i m)))
-but is expected to have type
-  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] {i : ι} (m : M i), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) m) (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) m) (FunLike.coe.{succ (max u1 u2), succ (max u1 u2), succ (max u1 u2)} (MonoidHom.{max u1 u2, max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (Con.mulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i))))) (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (fun (_x : FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) => Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) _x) (MulHomClass.toFunLike.{max u1 u2, max u1 u2, max u1 u2} (MonoidHom.{max u1 u2, max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (Con.mulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i))))) (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (MulOneClass.toMul.{max u1 u2} (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (Con.mulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i))))) (MonoidHomClass.toMulHomClass.{max u1 u2, max u1 u2, max u1 u2} (MonoidHom.{max u1 u2, max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (Con.mulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i))))) (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (Con.mulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (MonoidHom.monoidHomClass.{max u1 u2, max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (Con.mulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i))))))) (Con.mk'.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (FreeMonoid.of.{max u1 u2} (Sigma.{u2, u1} ι M) (Sigma.mk.{u2, u1} ι M i m)))
+<too large>
 Case conversion may be inaccurate. Consider using '#align free_product.of_apply FreeProduct.of_applyₓ'. -/
 theorem of_apply {i} (m : M i) : of m = Con.mk' _ (FreeMonoid.of <| Sigma.mk i m) :=
   rfl
@@ -186,10 +183,7 @@ def lift : (∀ i, M i →* N) ≃ (FreeProduct M →* N)
 #align free_product.lift FreeProduct.lift
 
 /- warning: free_product.lift_of -> FreeProduct.lift_of is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {N : Type.{u3}} [_inst_3 : Monoid.{u3} N] (fi : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) {i : ι} (m : M i), Eq.{succ u3} N (coeFn.{max (succ u3) (succ (max u1 u2)), max (succ (max u1 u2)) (succ u3)} (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) (fun (_x : MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) => (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) -> N) (MonoidHom.hasCoeToFun.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) (coeFn.{max 1 (max (max (succ u1) (succ u3) (succ u2)) (succ u3) (succ (max u1 u2))) (max (succ u3) (succ (max u1 u2))) (succ u1) (succ u3) (succ u2), max (max (succ u1) (succ u3) (succ u2)) (succ u3) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (fun (_x : Equiv.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) => (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) -> (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (Equiv.hasCoeToFun.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (FreeProduct.lift.{u1, u2, u3} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i) N _inst_3) fi) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m)) (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (fun (_x : MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => (M i) -> N) (MonoidHom.hasCoeToFun.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (fi i) m)
-but is expected to have type
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {N : Type.{u3}} [_inst_3 : Monoid.{u3} N] (fi : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) {i : ι} (m : M i), Eq.{succ u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) => N) (FunLike.coe.{max (succ u2) (succ u1), succ u2, max (succ u2) (succ u1)} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (a : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) a) (MulHomClass.toFunLike.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m)) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (succ u1) (succ u2), succ u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) fi) (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (fun (_x : FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) => N) _x) (MulHomClass.toFunLike.{max (max u1 u2) u3, max u1 u2, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) fi) (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)))) (MulOneClass.toMul.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHomClass.toMulHomClass.{max (max u1 u2) u3, max u1 u2, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) fi) (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3) (MonoidHom.monoidHomClass.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)))) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1)} (Equiv.{max (max (succ u1) (succ u2)) (succ u3), max (succ u3) (succ (max u2 u1))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (fun (_x : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) _x) (Equiv.instFunLikeEquiv.{max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1)} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (FreeProduct.lift.{u1, u2, u3} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i) N _inst_3) fi) (FunLike.coe.{max (succ u2) (succ u1), succ u2, max (succ u2) (succ u1)} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m)) (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => N) _x) (MulHomClass.toFunLike.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (M i) N (MulOneClass.toMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MulOneClass.toMul.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3) (MonoidHom.monoidHomClass.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)))) (fi i) m)
+<too large>
 Case conversion may be inaccurate. Consider using '#align free_product.lift_of FreeProduct.lift_ofₓ'. -/
 @[simp]
 theorem lift_of {N} [Monoid N] (fi : ∀ i, M i →* N) {i} (m : M i) : lift fi (of m) = fi i m := by
@@ -215,10 +209,7 @@ theorem induction_on {C : FreeProduct M → Prop} (m : FreeProduct M) (h_one : C
 #align free_product.induction_on FreeProduct.induction_on
 
 /- warning: free_product.of_left_inverse -> FreeProduct.of_leftInverse is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : DecidableEq.{succ u1} ι] (i : ι), Function.LeftInverse.{succ u2, succ (max u1 u2)} (M i) (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (coeFn.{max (succ u2) (succ (max u1 u2)), max (succ (max u1 u2)) (succ u2)} (MonoidHom.{max u1 u2, u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (fun (_x : MonoidHom.{max u1 u2, u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) => (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) -> (M i)) (MonoidHom.hasCoeToFun.{max u1 u2, u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ u2) (succ (max u1 u2))) (max (succ u2) (succ (max u1 u2))) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ u2) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ (max u1 u2))} (forall (i_1 : ι), MonoidHom.{u2, u2} (M i_1) (M i) (Monoid.toMulOneClass.{u2} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MonoidHom.{max u1 u2, u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)))) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u2) (succ (max u1 u2))} (forall (i_1 : ι), MonoidHom.{u2, u2} (M i_1) (M i) (Monoid.toMulOneClass.{u2} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MonoidHom.{max u1 u2, u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)))) => (forall (i_1 : ι), MonoidHom.{u2, u2} (M i_1) (M i) (Monoid.toMulOneClass.{u2} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) -> (MonoidHom.{max u1 u2, u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u2) (succ (max u1 u2))} (forall (i_1 : ι), MonoidHom.{u2, u2} (M i_1) (M i) (Monoid.toMulOneClass.{u2} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MonoidHom.{max u1 u2, u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)))) (FreeProduct.lift.{u1, u2, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i) (M i) (_inst_1 i)) (Pi.mulSingle.{u1, u2} ι (fun (i_1 : ι) => MonoidHom.{u2, u2} (M i_1) (M i) (Monoid.toMulOneClass.{u2} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (fun (a : ι) (b : ι) => _inst_3 a b) (fun (i_1 : ι) => MonoidHom.hasOne.{u2, u2} (M i_1) (M i) (Monoid.toMulOneClass.{u2} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) i (MonoidHom.id.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)))))) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i))
-but is expected to have type
-  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] [_inst_3 : DecidableEq.{succ u2} ι] (i : ι), Function.LeftInverse.{succ u1, max (succ u2) (succ u1)} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i_1 : ι), MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) => MonoidHom.{max u1 u2, u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (Pi.mulSingle.{u2, u1} ι (fun (i_1 : ι) => MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (fun (a : ι) (b : ι) => _inst_3 a b) (fun (i_1 : ι) => instOneMonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) i (MonoidHom.id.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))))) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (fun (_x : FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => M i) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i_1 : ι), MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) => MonoidHom.{max u1 u2, u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (Pi.mulSingle.{u2, u1} ι (fun (i_1 : ι) => MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (fun (a : ι) (b : ι) => _inst_3 a b) (fun (i_1 : ι) => instOneMonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) i (MonoidHom.id.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))))) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MonoidHomClass.toMulHomClass.{max u2 u1, max u2 u1, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i_1 : ι), MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) => MonoidHom.{max u1 u2, u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (Pi.mulSingle.{u2, u1} ι (fun (i_1 : ι) => MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (fun (a : ι) (b : ι) => _inst_3 a b) (fun (i_1 : ι) => instOneMonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) i (MonoidHom.id.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))))) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (MonoidHom.monoidHomClass.{max u2 u1, u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))))) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u2) (succ u1), max (succ u1) (succ (max u1 u2))} (forall (i_1 : ι), MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MonoidHom.{max u1 u2, u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)))) (forall (i_1 : ι), MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (fun (_x : forall (i_1 : ι), MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i_1 : ι), MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) => MonoidHom.{max u1 u2, u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (forall (i_1 : ι), MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MonoidHom.{max u1 u2, u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)))) (FreeProduct.lift.{u2, u1, u1} ι M (fun (i : ι) => _inst_1 i) (M i) (_inst_1 i)) (Pi.mulSingle.{u2, u1} ι (fun (i_1 : ι) => MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (fun (a : ι) (b : ι) => _inst_3 a b) (fun (i_1 : ι) => instOneMonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) i (MonoidHom.id.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)))))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i))
+<too large>
 Case conversion may be inaccurate. Consider using '#align free_product.of_left_inverse FreeProduct.of_leftInverseₓ'. -/
 theorem of_leftInverse [DecidableEq ι] (i : ι) :
     Function.LeftInverse (lift <| Pi.mulSingle i (MonoidHom.id (M i))) of := fun x => by
@@ -236,10 +227,7 @@ theorem of_injective (i : ι) : Function.Injective ⇑(of : M i →* _) := by
 #align free_product.of_injective FreeProduct.of_injective
 
 /- warning: free_product.lift_mrange_le -> FreeProduct.lift_mrange_le is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {N : Type.{u3}} [_inst_3 : Monoid.{u3} N] (f : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) {s : Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)}, (forall (i : ι), LE.le.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (Preorder.toHasLe.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (SetLike.partialOrder.{u3, u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) N (Submonoid.setLike.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3))))) (MonoidHom.mrange.{u2, u3, max u3 u2} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3) (MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.monoidHomClass.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (f i)) s) -> (LE.le.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (Preorder.toHasLe.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (SetLike.partialOrder.{u3, u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) N (Submonoid.setLike.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3))))) (MonoidHom.mrange.{max u1 u2, u3, max u3 u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.monoidHomClass.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) (coeFn.{max 1 (max (max (succ u1) (succ u3) (succ u2)) (succ u3) (succ (max u1 u2))) (max (succ u3) (succ (max u1 u2))) (succ u1) (succ u3) (succ u2), max (max (succ u1) (succ u3) (succ u2)) (succ u3) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (fun (_x : Equiv.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) => (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) -> (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (Equiv.hasCoeToFun.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (FreeProduct.lift.{u1, u2, u3} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i) N _inst_3) f)) s)
-but is expected to have type
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {N : Type.{u3}} [_inst_3 : Monoid.{u3} N] (f : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) {s : Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)}, (forall (i : ι), LE.le.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (Preorder.toLE.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (Submonoid.instCompleteLatticeSubmonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)))))) (MonoidHom.mrange.{u2, u3, max u2 u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3) (MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.monoidHomClass.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (f i)) s) -> (LE.le.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (Preorder.toLE.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (Submonoid.instCompleteLatticeSubmonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)))))) (MonoidHom.mrange.{max u1 u2, u3, max (max u1 u2) u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3) ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) f) (MonoidHom.monoidHomClass.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1)} (Equiv.{max (max (succ u1) (succ u2)) (succ u3), max (succ u3) (succ (max u2 u1))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (fun (_x : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) _x) (Equiv.instFunLikeEquiv.{max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1)} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (FreeProduct.lift.{u1, u2, u3} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i) N _inst_3) f)) s)
+<too large>
 Case conversion may be inaccurate. Consider using '#align free_product.lift_mrange_le FreeProduct.lift_mrange_leₓ'. -/
 theorem lift_mrange_le {N} [Monoid N] (f : ∀ i, M i →* N) {s : Submonoid N}
     (h : ∀ i, (f i).mrange ≤ s) : (lift f).mrange ≤ s :=
@@ -272,10 +260,7 @@ instance : Inv (FreeProduct G)
     MulOpposite.unop ∘ lift fun i => (of : G i →* _).op.comp (MulEquiv.inv' (G i)).toMonoidHom
 
 /- warning: free_product.inv_def -> FreeProduct.inv_def is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} (G : ι -> Type.{u2}) [_inst_3 : forall (i : ι), Group.{u2} (G i)] (x : FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))), Eq.{succ (max u1 u2)} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Inv.inv.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.hasInv.{u1, u2} ι G (fun (i : ι) => _inst_3 i)) x) (MulOpposite.unop.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (coeFn.{succ (max u1 u2), succ (max u1 u2)} (MonoidHom.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))))) (fun (_x : MonoidHom.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))))) => (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) -> (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))) (MonoidHom.hasCoeToFun.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))))) (coeFn.{max 1 (max (max (succ u1) (succ (max u1 u2)) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ (max u1 u2)) (succ u2), max (max (succ u1) (succ (max u1 u2)) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ (max u1 u2)) (succ u2), succ (max u1 u2)} (forall (i : ι), MonoidHom.{u2, max u1 u2} (G i) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))))) (MonoidHom.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))))) (fun (_x : Equiv.{max (succ u1) (succ (max u1 u2)) (succ u2), succ (max u1 u2)} (forall (i : ι), MonoidHom.{u2, max u1 u2} (G i) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))))) (MonoidHom.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))))) => (forall (i : ι), MonoidHom.{u2, max u1 u2} (G i) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))))) -> (MonoidHom.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))))) (Equiv.hasCoeToFun.{max (succ u1) (succ (max u1 u2)) (succ u2), succ (max u1 u2)} (forall (i : ι), MonoidHom.{u2, max u1 u2} (G i) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))))) (MonoidHom.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))))) (FreeProduct.lift.{u1, u2, max u1 u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))) (fun (i : ι) => MonoidHom.comp.{u2, u2, max u1 u2} (G i) (MulOpposite.{u2} (G i)) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u2} (G i) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))) (coeFn.{max 1 (succ (max u1 u2)) (succ u2), max (succ (max u1 u2)) (succ u2)} (Equiv.{max (succ (max u1 u2)) (succ u2), max (succ (max u1 u2)) (succ u2)} (MonoidHom.{u2, max u1 u2} (G i) (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))) (MonoidHom.{u2, max u1 u2} (MulOpposite.{u2} (G i)) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u2} (G i) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))))) (fun (_x : Equiv.{max (succ (max u1 u2)) (succ u2), max (succ (max u1 u2)) (succ u2)} (MonoidHom.{u2, max u1 u2} (G i) (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))) (MonoidHom.{u2, max u1 u2} (MulOpposite.{u2} (G i)) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u2} (G i) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))))) => (MonoidHom.{u2, max u1 u2} (G i) (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))) -> (MonoidHom.{u2, max u1 u2} (MulOpposite.{u2} (G i)) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u2} (G i) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))))) (Equiv.hasCoeToFun.{max (succ (max u1 u2)) (succ u2), max (succ (max u1 u2)) (succ u2)} (MonoidHom.{u2, max u1 u2} (G i) (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))) (MonoidHom.{u2, max u1 u2} (MulOpposite.{u2} (G i)) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u2} (G i) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))))) (MonoidHom.op.{u2, max u1 u2} (G i) (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))) (FreeProduct.of.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) i)) (MulEquiv.toMonoidHom.{u2, u2} (G i) (MulOpposite.{u2} (G i)) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u2} (G i) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulEquiv.inv'.{u2} (G i) (Group.toDivisionMonoid.{u2} (G i) (_inst_3 i)))))) x))
-but is expected to have type
-  forall {ι : Type.{u2}} (G : ι -> Type.{u1}) [_inst_3 : forall (i : ι), Group.{u1} (G i)] (x : FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))), Eq.{max (succ u2) (succ u1)} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Inv.inv.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (FreeProduct.instInvFreeProductToMonoidToDivInvMonoid.{u2, u1} ι G (fun (i : ι) => _inst_3 i)) x) (MulOpposite.unop.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) => MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (fun (i : ι) => MonoidHom.comp.{u1, u1, max u2 u1} (G i) (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FunLike.coe.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (Equiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (fun (a : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) a) (Equiv.instFunLikeEquiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.op.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.of.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i)) (MulEquiv.toMonoidHom.{u1, u1} (G i) (MulOpposite.{u1} (G i)) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulEquiv.inv'.{u1} (G i) (Group.toDivisionMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (fun (_x : FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) => MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) => MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (fun (i : ι) => MonoidHom.comp.{u1, u1, max u2 u1} (G i) (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FunLike.coe.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (Equiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (fun (a : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) a) (Equiv.instFunLikeEquiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.op.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.of.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i)) (MulEquiv.toMonoidHom.{u1, u1} (G i) (MulOpposite.{u1} (G i)) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulEquiv.inv'.{u1} (G i) (Group.toDivisionMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MulOneClass.toMul.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (MonoidHomClass.toMulHomClass.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) => MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (fun (i : ι) => MonoidHom.comp.{u1, u1, max u2 u1} (G i) (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FunLike.coe.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (Equiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (fun (a : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) a) (Equiv.instFunLikeEquiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.op.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.of.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i)) (MulEquiv.toMonoidHom.{u1, u1} (G i) (MulOpposite.{u1} (G i)) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulEquiv.inv'.{u1} (G i) (Group.toDivisionMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.monoidHomClass.{max u2 u1, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))))) (FunLike.coe.{max (max (succ (max u2 u1)) (succ u1)) (succ u2), max (max (succ (max u2 u1)) (succ u1)) (succ u2), max (max (succ (max u2 u1)) (succ u1)) (succ u2)} (Equiv.{max (max (succ u2) (succ u1)) (succ (max u2 u1)), max (succ (max u2 u1)) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (fun (_x : forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) => MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) _x) (Equiv.instFunLikeEquiv.{max (max (succ (max u2 u1)) (succ u1)) (succ u2), max (max (succ (max u2 u1)) (succ u1)) (succ u2)} (forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (FreeProduct.lift.{u2, u1, max u2 u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (fun (i : ι) => MonoidHom.comp.{u1, u1, max u2 u1} (G i) (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FunLike.coe.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (Equiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (fun (_x : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) _x) (Equiv.instFunLikeEquiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.op.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.of.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i)) (MulEquiv.toMonoidHom.{u1, u1} (G i) (MulOpposite.{u1} (G i)) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulEquiv.inv'.{u1} (G i) (Group.toDivisionMonoid.{u1} (G i) (_inst_3 i)))))) x))
+<too large>
 Case conversion may be inaccurate. Consider using '#align free_product.inv_def FreeProduct.inv_defₓ'. -/
 theorem inv_def (x : FreeProduct G) :
     x⁻¹ =
@@ -299,10 +284,7 @@ instance : Group (FreeProduct G) :=
           hy] }
 
 /- warning: free_product.lift_range_le -> FreeProduct.lift_range_le is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} (G : ι -> Type.{u2}) [_inst_3 : forall (i : ι), Group.{u2} (G i)] {N : Type.{u3}} [_inst_4 : Group.{u3} N] (f : forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) {s : Subgroup.{u3} N _inst_4}, (forall (i : ι), LE.le.{u3} (Subgroup.{u3} N _inst_4) (Preorder.toHasLe.{u3} (Subgroup.{u3} N _inst_4) (PartialOrder.toPreorder.{u3} (Subgroup.{u3} N _inst_4) (SetLike.partialOrder.{u3, u3} (Subgroup.{u3} N _inst_4) N (Subgroup.setLike.{u3} N _inst_4)))) (MonoidHom.range.{u2, u3} (G i) (_inst_3 i) N _inst_4 (f i)) s) -> (LE.le.{u3} (Subgroup.{u3} N _inst_4) (Preorder.toHasLe.{u3} (Subgroup.{u3} N _inst_4) (PartialOrder.toPreorder.{u3} (Subgroup.{u3} N _inst_4) (SetLike.partialOrder.{u3, u3} (Subgroup.{u3} N _inst_4) N (Subgroup.setLike.{u3} N _inst_4)))) (MonoidHom.range.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.group.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => _inst_3 i)) N _inst_4 (coeFn.{max 1 (max (max (succ u1) (succ u3) (succ u2)) (succ u3) (succ (max u1 u2))) (max (succ u3) (succ (max u1 u2))) (succ u1) (succ u3) (succ u2), max (max (succ u1) (succ u3) (succ u2)) (succ u3) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))))) (fun (_x : Equiv.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))))) => (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) -> (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))))) (Equiv.hasCoeToFun.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))))) (FreeProduct.lift.{u1, u2, u3} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))) f)) s)
-but is expected to have type
-  forall {ι : Type.{u1}} (G : ι -> Type.{u2}) [_inst_3 : forall (i : ι), Group.{u2} (G i)] {N : Type.{u3}} [_inst_4 : Group.{u3} N] (f : forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) {s : Subgroup.{u3} N _inst_4}, (forall (i : ι), LE.le.{u3} (Subgroup.{u3} N _inst_4) (Preorder.toLE.{u3} (Subgroup.{u3} N _inst_4) (PartialOrder.toPreorder.{u3} (Subgroup.{u3} N _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u3} (Subgroup.{u3} N _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Subgroup.{u3} N _inst_4) (Subgroup.instCompleteLatticeSubgroup.{u3} N _inst_4))))) (MonoidHom.range.{u2, u3} (G i) (_inst_3 i) N _inst_4 (f i)) s) -> (LE.le.{u3} (Subgroup.{u3} N _inst_4) (Preorder.toLE.{u3} (Subgroup.{u3} N _inst_4) (PartialOrder.toPreorder.{u3} (Subgroup.{u3} N _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u3} (Subgroup.{u3} N _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Subgroup.{u3} N _inst_4) (Subgroup.instCompleteLatticeSubgroup.{u3} N _inst_4))))) (MonoidHom.range.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.instGroupFreeProductToMonoidToDivInvMonoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => _inst_3 i)) N _inst_4 (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1)} (Equiv.{max (max (succ u1) (succ u2)) (succ u3), max (succ u3) (succ (max u2 u1))} (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) (MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))))) (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) (fun (_x : forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) => MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) _x) (Equiv.instFunLikeEquiv.{max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1)} (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) (MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))))) (FreeProduct.lift.{u1, u2, u3} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))) f)) s)
+<too large>
 Case conversion may be inaccurate. Consider using '#align free_product.lift_range_le FreeProduct.lift_range_leₓ'. -/
 theorem lift_range_le {N} [Group N] (f : ∀ i, G i →* N) {s : Subgroup N}
     (h : ∀ i, (f i).range ≤ s) : (lift f).range ≤ s :=
@@ -424,13 +406,9 @@ dropping the first letter. -/
 private def mk_aux {l} (ls : List (Σi, M i)) (h1 : ∀ l' ∈ l::ls, Sigma.snd l' ≠ 1)
     (h2 : (l::ls).Chain' _) : Word M :=
   ⟨ls, fun l' hl => h1 _ (List.mem_cons_of_mem _ hl), h2.tail⟩
-#align free_product.word.mk_aux free_product.word.mk_aux
 
 /- warning: free_product.word.cons_eq_rcons -> FreeProduct.Word.cons_eq_rcons is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] {i : ι} {m : M i} {ls : List.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))} {h1 : forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.Mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (List.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (List.hasMem.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)) -> (Ne.{succ u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Sigma.snd.{u1, u2} ι (fun (i : ι) => M i) l) (OfNat.ofNat.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (OfNat.mk.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (One.one.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (MulOneClass.toHasOne.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Monoid.toMulOneClass.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (_inst_1 (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l))))))))} {h2 : List.Chain'.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (fun (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)) (l' : Sigma.{u1, u2} ι (fun (i : ι) => M i)) => Ne.{succ u1} ι (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l) (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l')) (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)}, Eq.{max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mk.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls) h1 h2) (FreeProduct.Word.rcons.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i (FreeProduct.Word.Pair.mk.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) i m (_Private.1265251317.mkAux.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2) (Iff.mpr (Ne.{succ u1} (Option.{u1} ι) (FreeProduct.Word.fstIdx.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (_Private.1265251317.mkAux.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2)) (Option.some.{u1} ι i)) (forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.Mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Option.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Option.hasMem.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.head?.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (FreeProduct.Word.toList.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (_Private.1265251317.mkAux.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2)))) -> (Ne.{succ u1} ι i (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l))) (FreeProduct.Word.fstIdx_ne_iff.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (_Private.1265251317.mkAux.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2) i) (List.Chain'.rel_head?.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (fun (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)) (l' : Sigma.{u1, u2} ι (fun (i : ι) => M i)) => Ne.{succ u1} ι (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l) (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l')) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h2))))
-but is expected to have type
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] {i : ι} {m : M i} {ls : List.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i))} {h1 : forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (List.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (List.instMembershipList.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.cons.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)) -> (Ne.{succ u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Sigma.snd.{u1, u2} ι (fun (i : ι) => M i) l) (OfNat.ofNat.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (One.toOfNat1.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Monoid.toOne.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (_inst_1 (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l))))))} {h2 : List.Chain'.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (fun (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)) (l' : Sigma.{u1, u2} ι (fun (i : ι) => M i)) => Ne.{succ u1} ι (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l) (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l')) (List.cons.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)}, Eq.{max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mk.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (List.cons.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls) h1 h2) (FreeProduct.Word.rcons.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i (FreeProduct.Word.Pair.mk.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i m (_private.Mathlib.GroupTheory.FreeProduct.0.FreeProduct.Word.mkAux.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2) (Iff.mpr (Ne.{succ u1} (Option.{u1} ι) (FreeProduct.Word.fstIdx.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (_private.Mathlib.GroupTheory.FreeProduct.0.FreeProduct.Word.mkAux.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2)) (Option.some.{u1} ι i)) (forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Option.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Option.instMembershipOption.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.head?.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (FreeProduct.Word.toList.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (_private.Mathlib.GroupTheory.FreeProduct.0.FreeProduct.Word.mkAux.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2)))) -> (Ne.{succ u1} ι i (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l))) (FreeProduct.Word.fstIdx_ne_iff.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (_private.Mathlib.GroupTheory.FreeProduct.0.FreeProduct.Word.mkAux.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2) i) (List.Chain'.rel_head?.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (fun (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)) (l' : Sigma.{u1, u2} ι (fun (i : ι) => M i)) => Ne.{succ u1} ι (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l) (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l')) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h2))))
+<too large>
 Case conversion may be inaccurate. Consider using '#align free_product.word.cons_eq_rcons FreeProduct.Word.cons_eq_rconsₓ'. -/
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
 theorem cons_eq_rcons {i} {m : M i} {ls h1 h2} :
@@ -497,7 +475,6 @@ private def equiv_pair_aux (i) : ∀ w : Word M, { p : Pair M i // rcons p = w }
             fstIdx_ne := by cases ij <;> exact fst_idx_ne_iff.mpr h2.rel_head' }
         property := by cases ij <;> exact cons_eq_rcons.symm }
     else ⟨⟨1, w, (Option.some_injective _).Ne (Ne.symm ij)⟩, dif_pos rfl⟩
-#align free_product.word.equiv_pair_aux free_product.word.equiv_pair_aux
 
 #print FreeProduct.Word.equivPair /-
 /-- The equivalence between words and pairs. Given a word, it decomposes it as a pair by removing
@@ -548,10 +525,7 @@ instance : MulAction (FreeProduct M) (Word M) :=
   MulAction.ofEndHom (lift fun i => MulAction.toEndHom)
 
 /- warning: free_product.word.of_smul_def -> FreeProduct.Word.of_smul_def is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] [_inst_4 : DecidableEq.{succ u1} ι] (i : ι) (w : FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (m : M i), Eq.{succ (max u1 u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (SMul.smul.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulAction.toHasSmul.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mulAction.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b))) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m) w) (FreeProduct.Word.rcons.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i (FreeProduct.Word.Pair.mk.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i (HMul.hMul.{u2, u2, u2} (M i) (M i) (M i) (instHMul.{u2} (M i) (MulOneClass.toHasMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)))) m (FreeProduct.Word.Pair.head.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i (coeFn.{max 1 (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) => (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) -> (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.equivPair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i) w))) (FreeProduct.Word.Pair.tail.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i (coeFn.{max 1 (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) => (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) -> (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.equivPair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i) w)) (FreeProduct.Word.Pair.fstIdx_ne.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i (coeFn.{max 1 (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) => (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) -> (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.equivPair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i) w))))
-but is expected to have type
-  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u1} (M i)] [_inst_4 : DecidableEq.{succ u2} ι] (i : ι) (w : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (m : M i), Eq.{max (succ u2) (succ u1)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (HSMul.hSMul.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instHSMul.{max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulAction.toSMul.{max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.instMulActionFreeProductWordInstMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b)))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) m) w) (FreeProduct.Word.rcons.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i (let src._@.Mathlib.GroupTheory.FreeProduct._hyg.3964 : (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) w := FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (fun (a : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) a) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.equivPair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i) w; FreeProduct.Word.Pair.mk.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i (HMul.hMul.{u1, u1, u1} (M i) (M i) (M i) (instHMul.{u1} (M i) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)))) m (FreeProduct.Word.Pair.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (fun (a : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) a) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.equivPair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i) w))) (FreeProduct.Word.Pair.tail.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i src._@.Mathlib.GroupTheory.FreeProduct._hyg.3964) (FreeProduct.Word.Pair.fstIdx_ne.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i src._@.Mathlib.GroupTheory.FreeProduct._hyg.3964)))
+<too large>
 Case conversion may be inaccurate. Consider using '#align free_product.word.of_smul_def FreeProduct.Word.of_smul_defₓ'. -/
 theorem of_smul_def (i) (w : Word M) (m : M i) :
     of m • w = rcons { equivPair i w with headI := m * (equivPair i w).headI } :=
@@ -571,10 +545,7 @@ theorem cons_eq_smul {i} {m : M i} {ls h1 h2} :
 #align free_product.word.cons_eq_smul FreeProduct.Word.cons_eq_smul
 
 /- warning: free_product.word.smul_induction -> FreeProduct.Word.smul_induction is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] [_inst_4 : DecidableEq.{succ u1} ι] {C : (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) -> Prop}, (C (FreeProduct.Word.empty.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) -> (forall (i : ι) (m : M i) (w : FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)), (C w) -> (C (SMul.smul.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulAction.toHasSmul.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mulAction.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b))) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m) w))) -> (forall (w : FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)), C w)
-but is expected to have type
-  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u1} (M i)] [_inst_4 : DecidableEq.{succ u2} ι] {C : (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) -> Prop}, (C (FreeProduct.Word.empty.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) -> (forall (i : ι) (m : M i) (w : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)), (C w) -> (C (HSMul.hSMul.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instHSMul.{max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulAction.toSMul.{max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.instMulActionFreeProductWordInstMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b)))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) m) w))) -> (forall (w : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)), C w)
+<too large>
 Case conversion may be inaccurate. Consider using '#align free_product.word.smul_induction FreeProduct.Word.smul_inductionₓ'. -/
 theorem smul_induction {C : Word M → Prop} (h_empty : C empty)
     (h_smul : ∀ (i) (m : M i) (w), C w → C (of m • w)) (w : Word M) : C w :=
@@ -1008,10 +979,7 @@ variable (hpp : Pairwise fun i j => ∀ h : H i, h ≠ 1 → f i h • X j ⊆ X
 include hpp
 
 /- warning: free_product.lift_word_ping_pong -> FreeProduct.lift_word_ping_pong is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {G : Type.{u2}} [_inst_3 : Group.{u2} G] {H : ι -> Type.{u3}} [_inst_4 : forall (i : ι), Group.{u3} (H i)] (f : forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) {α : Type.{u4}} [_inst_5 : MulAction.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))] (X : ι -> (Set.{u4} α)), (Pairwise.{u1} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u3} (H i) h (OfNat.ofNat.{u3} (H i) 1 (OfNat.mk.{u3} (H i) 1 (One.one.{u3} (H i) (MulOneClass.toHasOne.{u3} (H i) (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.hasSubset.{u4} α) (SMul.smul.{u2, u4} G (Set.{u4} α) (Set.smulSet.{u2, u4} G α (MulAction.toHasSmul.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)) _inst_5)) (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (H i) -> G) (MonoidHom.hasCoeToFun.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} {j : ι} {k : ι} (w : FreeProduct.NeWord.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j), (Ne.{succ u1} ι j k) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.hasSubset.{u4} α) (SMul.smul.{u2, u4} G (Set.{u4} α) (Set.smulSet.{u2, u4} G α (MulAction.toHasSmul.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)) _inst_5)) (coeFn.{max (succ u2) (succ (max u1 u3)), max (succ (max u1 u3)) (succ u2)} (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) -> G) (MonoidHom.hasCoeToFun.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (coeFn.{max 1 (max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))) (max (succ u2) (succ (max u1 u3))) (succ u1) (succ u2) (succ u3), max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))} (Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (fun (_x : Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) => (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) -> (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (FreeProduct.lift.{u1, u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) f) (FreeProduct.NeWord.prod.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) (X k)) (X i)))
-but is expected to have type
-  forall {ι : Type.{u4}} {G : Type.{u1}} [_inst_3 : Group.{u1} G] {H : ι -> Type.{u3}} [_inst_4 : forall (i : ι), Group.{u3} (H i)] (f : forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) {α : Type.{u2}} [_inst_5 : MulAction.{u1, u2} G α (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))] (X : ι -> (Set.{u2} α)), (Pairwise.{u4} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u3} (H i) h (OfNat.ofNat.{u3} (H i) 1 (One.toOfNat1.{u3} (H i) (InvOneClass.toOne.{u3} (H i) (DivInvOneMonoid.toInvOneClass.{u3} (H i) (DivisionMonoid.toDivInvOneMonoid.{u3} (H i) (Group.toDivisionMonoid.{u3} (H i) (_inst_4 i)))))))) -> (HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) (HSMul.hSMul.{u1, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Set.{u2} α) (Set.{u2} α) (instHSMul.{u1, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Set.{u2} α) (Set.smulSet.{u1, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) α (MulAction.toSMul.{u1, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) α (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) _inst_3)) _inst_5))) (FunLike.coe.{max (succ u1) (succ u3), succ u3, succ u1} (MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) (fun (_x : H i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) _x) (MulHomClass.toFunLike.{max u1 u3, u3, u1} (MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (MulOneClass.toMul.{u3} (H i) (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u3, u3, u1} (MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} {j : ι} {k : ι} (w : FreeProduct.NeWord.{u4, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j), (Ne.{succ u4} ι j k) -> (HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) (HSMul.hSMul.{u1, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u4, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) (Set.{u2} α) (Set.{u2} α) (instHSMul.{u1, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u4, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) (Set.{u2} α) (Set.smulSet.{u1, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u4, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) α (MulAction.toSMul.{u1, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u4, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) α (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u4, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u4, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) _inst_3)) _inst_5))) (FunLike.coe.{max (max (succ u4) (succ u1)) (succ u3), max (succ u4) (succ u3), succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u3 u4, u1} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (fun (_x : FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) => G) _x) (MulHomClass.toFunLike.{max (max u4 u1) u3, max u4 u3, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u3 u4, u1} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (MulOneClass.toMul.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max (max u4 u1) u3, max u4 u3, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u3 u4, u1} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{max u4 u3, u1} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (FunLike.coe.{max (max (succ u1) (succ u3)) (succ u4), max (max (succ u1) (succ u3)) (succ u4), max (max (succ u1) (succ u3)) (succ u4)} (Equiv.{max (max (succ u4) (succ u3)) (succ u1), max (succ u1) (succ (max u3 u4))} (forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u3 u4, u1} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (fun (_x : forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u3 u4, u1} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) _x) (Equiv.instFunLikeEquiv.{max (max (succ u1) (succ u3)) (succ u4), max (max (succ u1) (succ u3)) (succ u4)} (forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u3 u4, u1} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (FreeProduct.lift.{u4, u3, u1} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) f) (FreeProduct.NeWord.prod.{u4, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) (X k)) (X i)))
+<too large>
 Case conversion may be inaccurate. Consider using '#align free_product.lift_word_ping_pong FreeProduct.lift_word_ping_pongₓ'. -/
 theorem lift_word_ping_pong {i j k} (w : NeWord H i j) (hk : j ≠ k) : lift f w.Prod • X k ⊆ X i :=
   by
@@ -1030,10 +998,7 @@ theorem lift_word_ping_pong {i j k} (w : NeWord H i j) (hk : j ≠ k) : lift f w
 include X hXnonempty hXdisj
 
 /- warning: free_product.lift_word_prod_nontrivial_of_other_i -> FreeProduct.lift_word_prod_nontrivial_of_other_i is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} {G : Type.{u2}} [_inst_3 : Group.{u2} G] {H : ι -> Type.{u3}} [_inst_4 : forall (i : ι), Group.{u3} (H i)] (f : forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) {α : Type.{u4}} [_inst_5 : MulAction.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.completeBooleanAlgebra.{u4} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u4} (Set.{u4} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u4} (Set.{u4} α) (Set.booleanAlgebra.{u4} α))) (X i) (X j))) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u3} (H i) h (OfNat.ofNat.{u3} (H i) 1 (OfNat.mk.{u3} (H i) 1 (One.one.{u3} (H i) (MulOneClass.toHasOne.{u3} (H i) (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.hasSubset.{u4} α) (SMul.smul.{u2, u4} G (Set.{u4} α) (Set.smulSet.{u2, u4} G α (MulAction.toHasSmul.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)) _inst_5)) (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (H i) -> G) (MonoidHom.hasCoeToFun.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} {j : ι} {k : ι} (w : FreeProduct.NeWord.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j), (Ne.{succ u1} ι k i) -> (Ne.{succ u1} ι k j) -> (Ne.{succ u2} G (coeFn.{max (succ u2) (succ (max u1 u3)), max (succ (max u1 u3)) (succ u2)} (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) -> G) (MonoidHom.hasCoeToFun.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (coeFn.{max 1 (max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))) (max (succ u2) (succ (max u1 u3))) (succ u1) (succ u2) (succ u3), max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))} (Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (fun (_x : Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) => (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) -> (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (FreeProduct.lift.{u1, u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) f) (FreeProduct.NeWord.prod.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) (OfNat.ofNat.{u2} G 1 (OfNat.mk.{u2} G 1 (One.one.{u2} G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))))))))
-but is expected to have type
-  forall {ι : Type.{u3}} {G : Type.{u1}} [_inst_3 : Group.{u1} G] {H : ι -> Type.{u2}} [_inst_4 : forall (i : ι), Group.{u2} (H i)] (f : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) {α : Type.{u4}} [_inst_5 : MulAction.{u1, u4} G α (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (BoundedOrder.toOrderBot.{u4} (Set.{u4} α) (Preorder.toLE.{u4} (Set.{u4} α) (PartialOrder.toPreorder.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))))) (CompleteLattice.toBoundedOrder.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (X i) (X j))) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u2} (H i) h (OfNat.ofNat.{u2} (H i) 1 (One.toOfNat1.{u2} (H i) (InvOneClass.toOne.{u2} (H i) (DivInvOneMonoid.toInvOneClass.{u2} (H i) (DivisionMonoid.toDivInvOneMonoid.{u2} (H i) (Group.toDivisionMonoid.{u2} (H i) (_inst_4 i)))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.instHasSubsetSet.{u4} α) (HSMul.hSMul.{u1, u4, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Set.{u4} α) (Set.{u4} α) (instHSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Set.{u4} α) (Set.smulSet.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) α (MulAction.toSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) α (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) _inst_3)) _inst_5))) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) (fun (_x : H i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) _x) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (MulOneClass.toMul.{u2} (H i) (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} {j : ι} {k : ι} (w : FreeProduct.NeWord.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j), (Ne.{succ u3} ι k i) -> (Ne.{succ u3} ι k j) -> (Ne.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (FunLike.coe.{max (max (succ u3) (succ u1)) (succ u2), max (succ u3) (succ u2), succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (fun (_x : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) _x) (MulHomClass.toFunLike.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (MulOneClass.toMul.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{max u3 u2, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (Equiv.{max (max (succ u3) (succ u2)) (succ u1), max (succ u1) (succ (max u2 u3))} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (fun (_x : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) _x) (Equiv.instFunLikeEquiv.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (FreeProduct.lift.{u3, u2, u1} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) f) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (InvOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (Group.toDivisionMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) _inst_3))))))))
+<too large>
 Case conversion may be inaccurate. Consider using '#align free_product.lift_word_prod_nontrivial_of_other_i FreeProduct.lift_word_prod_nontrivial_of_other_iₓ'. -/
 theorem lift_word_prod_nontrivial_of_other_i {i j k} (w : NeWord H i j) (hhead : k ≠ i)
     (hlast : k ≠ j) : lift f w.Prod ≠ 1 := by
@@ -1046,10 +1011,7 @@ theorem lift_word_prod_nontrivial_of_other_i {i j k} (w : NeWord H i j) (hhead :
 include hnontriv
 
 /- warning: free_product.lift_word_prod_nontrivial_of_head_eq_last -> FreeProduct.lift_word_prod_nontrivial_of_head_eq_last is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} [hnontriv : Nontrivial.{u1} ι] {G : Type.{u2}} [_inst_3 : Group.{u2} G] {H : ι -> Type.{u3}} [_inst_4 : forall (i : ι), Group.{u3} (H i)] (f : forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) {α : Type.{u4}} [_inst_5 : MulAction.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.completeBooleanAlgebra.{u4} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u4} (Set.{u4} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u4} (Set.{u4} α) (Set.booleanAlgebra.{u4} α))) (X i) (X j))) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u3} (H i) h (OfNat.ofNat.{u3} (H i) 1 (OfNat.mk.{u3} (H i) 1 (One.one.{u3} (H i) (MulOneClass.toHasOne.{u3} (H i) (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.hasSubset.{u4} α) (SMul.smul.{u2, u4} G (Set.{u4} α) (Set.smulSet.{u2, u4} G α (MulAction.toHasSmul.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)) _inst_5)) (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (H i) -> G) (MonoidHom.hasCoeToFun.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} (w : FreeProduct.NeWord.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i i), Ne.{succ u2} G (coeFn.{max (succ u2) (succ (max u1 u3)), max (succ (max u1 u3)) (succ u2)} (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) -> G) (MonoidHom.hasCoeToFun.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (coeFn.{max 1 (max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))) (max (succ u2) (succ (max u1 u3))) (succ u1) (succ u2) (succ u3), max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))} (Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (fun (_x : Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) => (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) -> (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (FreeProduct.lift.{u1, u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) f) (FreeProduct.NeWord.prod.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i i w)) (OfNat.ofNat.{u2} G 1 (OfNat.mk.{u2} G 1 (One.one.{u2} G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))))))
-but is expected to have type
-  forall {ι : Type.{u3}} [hnontriv : Nontrivial.{u3} ι] {G : Type.{u1}} [_inst_3 : Group.{u1} G] {H : ι -> Type.{u2}} [_inst_4 : forall (i : ι), Group.{u2} (H i)] (f : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) {α : Type.{u4}} [_inst_5 : MulAction.{u1, u4} G α (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (BoundedOrder.toOrderBot.{u4} (Set.{u4} α) (Preorder.toLE.{u4} (Set.{u4} α) (PartialOrder.toPreorder.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))))) (CompleteLattice.toBoundedOrder.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (X i) (X j))) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u2} (H i) h (OfNat.ofNat.{u2} (H i) 1 (One.toOfNat1.{u2} (H i) (InvOneClass.toOne.{u2} (H i) (DivInvOneMonoid.toInvOneClass.{u2} (H i) (DivisionMonoid.toDivInvOneMonoid.{u2} (H i) (Group.toDivisionMonoid.{u2} (H i) (_inst_4 i)))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.instHasSubsetSet.{u4} α) (HSMul.hSMul.{u1, u4, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Set.{u4} α) (Set.{u4} α) (instHSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Set.{u4} α) (Set.smulSet.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) α (MulAction.toSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) α (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) _inst_3)) _inst_5))) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) (fun (_x : H i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) _x) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (MulOneClass.toMul.{u2} (H i) (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} (w : FreeProduct.NeWord.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i), Ne.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i w)) (FunLike.coe.{max (max (succ u3) (succ u1)) (succ u2), max (succ u3) (succ u2), succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (fun (_x : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) _x) (MulHomClass.toFunLike.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (MulOneClass.toMul.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{max u3 u2, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (Equiv.{max (max (succ u3) (succ u2)) (succ u1), max (succ u1) (succ (max u2 u3))} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (fun (_x : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) _x) (Equiv.instFunLikeEquiv.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (FreeProduct.lift.{u3, u2, u1} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) f) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i w)) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i w)) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i w)) (InvOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i w)) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i w)) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i w)) (Group.toDivisionMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i w)) _inst_3)))))))
+<too large>
 Case conversion may be inaccurate. Consider using '#align free_product.lift_word_prod_nontrivial_of_head_eq_last FreeProduct.lift_word_prod_nontrivial_of_head_eq_lastₓ'. -/
 theorem lift_word_prod_nontrivial_of_head_eq_last {i} (w : NeWord H i i) : lift f w.Prod ≠ 1 :=
   by
@@ -1058,10 +1020,7 @@ theorem lift_word_prod_nontrivial_of_head_eq_last {i} (w : NeWord H i i) : lift
 #align free_product.lift_word_prod_nontrivial_of_head_eq_last FreeProduct.lift_word_prod_nontrivial_of_head_eq_last
 
 /- warning: free_product.lift_word_prod_nontrivial_of_head_card -> FreeProduct.lift_word_prod_nontrivial_of_head_card is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} [hnontriv : Nontrivial.{u1} ι] {G : Type.{u2}} [_inst_3 : Group.{u2} G] {H : ι -> Type.{u3}} [_inst_4 : forall (i : ι), Group.{u3} (H i)] (f : forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) {α : Type.{u4}} [_inst_5 : MulAction.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.completeBooleanAlgebra.{u4} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u4} (Set.{u4} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u4} (Set.{u4} α) (Set.booleanAlgebra.{u4} α))) (X i) (X j))) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u3} (H i) h (OfNat.ofNat.{u3} (H i) 1 (OfNat.mk.{u3} (H i) 1 (One.one.{u3} (H i) (MulOneClass.toHasOne.{u3} (H i) (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.hasSubset.{u4} α) (SMul.smul.{u2, u4} G (Set.{u4} α) (Set.smulSet.{u2, u4} G α (MulAction.toHasSmul.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)) _inst_5)) (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (H i) -> G) (MonoidHom.hasCoeToFun.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} {j : ι} (w : FreeProduct.NeWord.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j), (LE.le.{succ u3} Cardinal.{u3} Cardinal.hasLe.{u3} (OfNat.ofNat.{succ u3} Cardinal.{u3} 3 (OfNat.mk.{succ u3} Cardinal.{u3} 3 (bit1.{succ u3} Cardinal.{u3} Cardinal.hasOne.{u3} Cardinal.hasAdd.{u3} (One.one.{succ u3} Cardinal.{u3} Cardinal.hasOne.{u3})))) (Cardinal.mk.{u3} (H i))) -> (Ne.{succ u1} ι i j) -> (Ne.{succ u2} G (coeFn.{max (succ u2) (succ (max u1 u3)), max (succ (max u1 u3)) (succ u2)} (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) -> G) (MonoidHom.hasCoeToFun.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (coeFn.{max 1 (max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))) (max (succ u2) (succ (max u1 u3))) (succ u1) (succ u2) (succ u3), max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))} (Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (fun (_x : Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) => (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) -> (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (FreeProduct.lift.{u1, u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) f) (FreeProduct.NeWord.prod.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) (OfNat.ofNat.{u2} G 1 (OfNat.mk.{u2} G 1 (One.one.{u2} G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))))))))
-but is expected to have type
-  forall {ι : Type.{u3}} [hnontriv : Nontrivial.{u3} ι] {G : Type.{u1}} [_inst_3 : Group.{u1} G] {H : ι -> Type.{u2}} [_inst_4 : forall (i : ι), Group.{u2} (H i)] (f : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) {α : Type.{u4}} [_inst_5 : MulAction.{u1, u4} G α (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (BoundedOrder.toOrderBot.{u4} (Set.{u4} α) (Preorder.toLE.{u4} (Set.{u4} α) (PartialOrder.toPreorder.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))))) (CompleteLattice.toBoundedOrder.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (X i) (X j))) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u2} (H i) h (OfNat.ofNat.{u2} (H i) 1 (One.toOfNat1.{u2} (H i) (InvOneClass.toOne.{u2} (H i) (DivInvOneMonoid.toInvOneClass.{u2} (H i) (DivisionMonoid.toDivInvOneMonoid.{u2} (H i) (Group.toDivisionMonoid.{u2} (H i) (_inst_4 i)))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.instHasSubsetSet.{u4} α) (HSMul.hSMul.{u1, u4, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Set.{u4} α) (Set.{u4} α) (instHSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Set.{u4} α) (Set.smulSet.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) α (MulAction.toSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) α (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) _inst_3)) _inst_5))) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) (fun (_x : H i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) _x) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (MulOneClass.toMul.{u2} (H i) (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} {j : ι} (w : FreeProduct.NeWord.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j), (LE.le.{succ u2} Cardinal.{u2} Cardinal.instLECardinal.{u2} (OfNat.ofNat.{succ u2} Cardinal.{u2} 3 (instOfNat.{succ u2} Cardinal.{u2} 3 Cardinal.instNatCastCardinal.{u2} (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))) (Cardinal.mk.{u2} (H i))) -> (Ne.{succ u3} ι i j) -> (Ne.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (FunLike.coe.{max (max (succ u3) (succ u1)) (succ u2), max (succ u3) (succ u2), succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (fun (_x : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) _x) (MulHomClass.toFunLike.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (MulOneClass.toMul.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{max u3 u2, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (Equiv.{max (max (succ u3) (succ u2)) (succ u1), max (succ u1) (succ (max u2 u3))} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (fun (_x : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) _x) (Equiv.instFunLikeEquiv.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (FreeProduct.lift.{u3, u2, u1} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) f) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (InvOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (Group.toDivisionMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) _inst_3))))))))
+<too large>
 Case conversion may be inaccurate. Consider using '#align free_product.lift_word_prod_nontrivial_of_head_card FreeProduct.lift_word_prod_nontrivial_of_head_cardₓ'. -/
 theorem lift_word_prod_nontrivial_of_head_card {i j} (w : NeWord H i j) (hcard : 3 ≤ (#H i))
     (hheadtail : i ≠ j) : lift f w.Prod ≠ 1 :=
@@ -1083,10 +1042,7 @@ theorem lift_word_prod_nontrivial_of_head_card {i j} (w : NeWord H i j) (hcard :
 include hcard
 
 /- warning: free_product.lift_word_prod_nontrivial_of_not_empty -> FreeProduct.lift_word_prod_nontrivial_of_not_empty is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} [hnontriv : Nontrivial.{u1} ι] {G : Type.{u2}} [_inst_3 : Group.{u2} G] {H : ι -> Type.{u3}} [_inst_4 : forall (i : ι), Group.{u3} (H i)] (f : forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))), (Or (LE.le.{succ u1} Cardinal.{u1} Cardinal.hasLe.{u1} (OfNat.ofNat.{succ u1} Cardinal.{u1} 3 (OfNat.mk.{succ u1} Cardinal.{u1} 3 (bit1.{succ u1} Cardinal.{u1} Cardinal.hasOne.{u1} Cardinal.hasAdd.{u1} (One.one.{succ u1} Cardinal.{u1} Cardinal.hasOne.{u1})))) (Cardinal.mk.{u1} ι)) (Exists.{succ u1} ι (fun (i : ι) => LE.le.{succ u3} Cardinal.{u3} Cardinal.hasLe.{u3} (OfNat.ofNat.{succ u3} Cardinal.{u3} 3 (OfNat.mk.{succ u3} Cardinal.{u3} 3 (bit1.{succ u3} Cardinal.{u3} Cardinal.hasOne.{u3} Cardinal.hasAdd.{u3} (One.one.{succ u3} Cardinal.{u3} Cardinal.hasOne.{u3})))) (Cardinal.mk.{u3} (H i))))) -> (forall {α : Type.{u4}} [_inst_5 : MulAction.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.completeBooleanAlgebra.{u4} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u4} (Set.{u4} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u4} (Set.{u4} α) (Set.booleanAlgebra.{u4} α))) (X i) (X j))) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u3} (H i) h (OfNat.ofNat.{u3} (H i) 1 (OfNat.mk.{u3} (H i) 1 (One.one.{u3} (H i) (MulOneClass.toHasOne.{u3} (H i) (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.hasSubset.{u4} α) (SMul.smul.{u2, u4} G (Set.{u4} α) (Set.smulSet.{u2, u4} G α (MulAction.toHasSmul.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)) _inst_5)) (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (H i) -> G) (MonoidHom.hasCoeToFun.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} {j : ι} (w : FreeProduct.NeWord.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j), Ne.{succ u2} G (coeFn.{max (succ u2) (succ (max u1 u3)), max (succ (max u1 u3)) (succ u2)} (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) -> G) (MonoidHom.hasCoeToFun.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (coeFn.{max 1 (max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))) (max (succ u2) (succ (max u1 u3))) (succ u1) (succ u2) (succ u3), max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))} (Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (fun (_x : Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) => (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) -> (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (FreeProduct.lift.{u1, u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) f) (FreeProduct.NeWord.prod.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) (OfNat.ofNat.{u2} G 1 (OfNat.mk.{u2} G 1 (One.one.{u2} G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))))))))
-but is expected to have type
-  forall {ι : Type.{u3}} [hnontriv : Nontrivial.{u3} ι] {G : Type.{u1}} [_inst_3 : Group.{u1} G] {H : ι -> Type.{u2}} [_inst_4 : forall (i : ι), Group.{u2} (H i)] (f : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))), (Or (LE.le.{succ u3} Cardinal.{u3} Cardinal.instLECardinal.{u3} (OfNat.ofNat.{succ u3} Cardinal.{u3} 3 (instOfNat.{succ u3} Cardinal.{u3} 3 Cardinal.instNatCastCardinal.{u3} (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))) (Cardinal.mk.{u3} ι)) (Exists.{succ u3} ι (fun (i : ι) => LE.le.{succ u2} Cardinal.{u2} Cardinal.instLECardinal.{u2} (OfNat.ofNat.{succ u2} Cardinal.{u2} 3 (instOfNat.{succ u2} Cardinal.{u2} 3 Cardinal.instNatCastCardinal.{u2} (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))) (Cardinal.mk.{u2} (H i))))) -> (forall {α : Type.{u4}} [_inst_5 : MulAction.{u1, u4} G α (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (BoundedOrder.toOrderBot.{u4} (Set.{u4} α) (Preorder.toLE.{u4} (Set.{u4} α) (PartialOrder.toPreorder.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))))) (CompleteLattice.toBoundedOrder.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (X i) (X j))) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u2} (H i) h (OfNat.ofNat.{u2} (H i) 1 (One.toOfNat1.{u2} (H i) (InvOneClass.toOne.{u2} (H i) (DivInvOneMonoid.toInvOneClass.{u2} (H i) (DivisionMonoid.toDivInvOneMonoid.{u2} (H i) (Group.toDivisionMonoid.{u2} (H i) (_inst_4 i)))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.instHasSubsetSet.{u4} α) (HSMul.hSMul.{u1, u4, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Set.{u4} α) (Set.{u4} α) (instHSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Set.{u4} α) (Set.smulSet.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) α (MulAction.toSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) α (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) _inst_3)) _inst_5))) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) (fun (_x : H i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) _x) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (MulOneClass.toMul.{u2} (H i) (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} {j : ι} (w : FreeProduct.NeWord.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j), Ne.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (FunLike.coe.{max (max (succ u3) (succ u1)) (succ u2), max (succ u3) (succ u2), succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (fun (_x : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) _x) (MulHomClass.toFunLike.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (MulOneClass.toMul.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{max u3 u2, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (Equiv.{max (max (succ u3) (succ u2)) (succ u1), max (succ u1) (succ (max u2 u3))} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (fun (_x : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) _x) (Equiv.instFunLikeEquiv.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (FreeProduct.lift.{u3, u2, u1} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) f) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (InvOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (Group.toDivisionMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) _inst_3))))))))
+<too large>
 Case conversion may be inaccurate. Consider using '#align free_product.lift_word_prod_nontrivial_of_not_empty FreeProduct.lift_word_prod_nontrivial_of_not_emptyₓ'. -/
 theorem lift_word_prod_nontrivial_of_not_empty {i j} (w : NeWord H i j) : lift f w.Prod ≠ 1 := by
   classical
@@ -1122,10 +1078,7 @@ theorem lift_word_prod_nontrivial_of_not_empty {i j} (w : NeWord H i j) : lift f
 #align free_product.lift_word_prod_nontrivial_of_not_empty FreeProduct.lift_word_prod_nontrivial_of_not_empty
 
 /- warning: free_product.empty_of_word_prod_eq_one -> FreeProduct.empty_of_word_prod_eq_one is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} [hnontriv : Nontrivial.{u1} ι] {G : Type.{u2}} [_inst_3 : Group.{u2} G] {H : ι -> Type.{u3}} [_inst_4 : forall (i : ι), Group.{u3} (H i)] (f : forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))), (Or (LE.le.{succ u1} Cardinal.{u1} Cardinal.hasLe.{u1} (OfNat.ofNat.{succ u1} Cardinal.{u1} 3 (OfNat.mk.{succ u1} Cardinal.{u1} 3 (bit1.{succ u1} Cardinal.{u1} Cardinal.hasOne.{u1} Cardinal.hasAdd.{u1} (One.one.{succ u1} Cardinal.{u1} Cardinal.hasOne.{u1})))) (Cardinal.mk.{u1} ι)) (Exists.{succ u1} ι (fun (i : ι) => LE.le.{succ u3} Cardinal.{u3} Cardinal.hasLe.{u3} (OfNat.ofNat.{succ u3} Cardinal.{u3} 3 (OfNat.mk.{succ u3} Cardinal.{u3} 3 (bit1.{succ u3} Cardinal.{u3} Cardinal.hasOne.{u3} Cardinal.hasAdd.{u3} (One.one.{succ u3} Cardinal.{u3} Cardinal.hasOne.{u3})))) (Cardinal.mk.{u3} (H i))))) -> (forall {α : Type.{u4}} [_inst_5 : MulAction.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.completeBooleanAlgebra.{u4} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u4} (Set.{u4} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u4} (Set.{u4} α) (Set.booleanAlgebra.{u4} α))) (X i) (X j))) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u3} (H i) h (OfNat.ofNat.{u3} (H i) 1 (OfNat.mk.{u3} (H i) 1 (One.one.{u3} (H i) (MulOneClass.toHasOne.{u3} (H i) (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.hasSubset.{u4} α) (SMul.smul.{u2, u4} G (Set.{u4} α) (Set.smulSet.{u2, u4} G α (MulAction.toHasSmul.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)) _inst_5)) (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (H i) -> G) (MonoidHom.hasCoeToFun.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (f i) h) (X j)) (X i)))) -> (forall {w : FreeProduct.Word.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))}, (Eq.{succ u2} G (coeFn.{max (succ u2) (succ (max u1 u3)), max (succ (max u1 u3)) (succ u2)} (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) -> G) (MonoidHom.hasCoeToFun.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (coeFn.{max 1 (max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))) (max (succ u2) (succ (max u1 u3))) (succ u1) (succ u2) (succ u3), max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))} (Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (fun (_x : Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) => (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) -> (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (FreeProduct.lift.{u1, u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) f) (FreeProduct.Word.prod.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) w)) (OfNat.ofNat.{u2} G 1 (OfNat.mk.{u2} G 1 (One.one.{u2} G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))))))) -> (Eq.{max (succ u1) (succ u3)} (FreeProduct.Word.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) w (FreeProduct.Word.empty.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))))))
-but is expected to have type
-  forall {ι : Type.{u3}} [hnontriv : Nontrivial.{u3} ι] {G : Type.{u1}} [_inst_3 : Group.{u1} G] {H : ι -> Type.{u2}} [_inst_4 : forall (i : ι), Group.{u2} (H i)] (f : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))), (Or (LE.le.{succ u3} Cardinal.{u3} Cardinal.instLECardinal.{u3} (OfNat.ofNat.{succ u3} Cardinal.{u3} 3 (instOfNat.{succ u3} Cardinal.{u3} 3 Cardinal.instNatCastCardinal.{u3} (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))) (Cardinal.mk.{u3} ι)) (Exists.{succ u3} ι (fun (i : ι) => LE.le.{succ u2} Cardinal.{u2} Cardinal.instLECardinal.{u2} (OfNat.ofNat.{succ u2} Cardinal.{u2} 3 (instOfNat.{succ u2} Cardinal.{u2} 3 Cardinal.instNatCastCardinal.{u2} (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))) (Cardinal.mk.{u2} (H i))))) -> (forall {α : Type.{u4}} [_inst_5 : MulAction.{u1, u4} G α (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (BoundedOrder.toOrderBot.{u4} (Set.{u4} α) (Preorder.toLE.{u4} (Set.{u4} α) (PartialOrder.toPreorder.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))))) (CompleteLattice.toBoundedOrder.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (X i) (X j))) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u2} (H i) h (OfNat.ofNat.{u2} (H i) 1 (One.toOfNat1.{u2} (H i) (InvOneClass.toOne.{u2} (H i) (DivInvOneMonoid.toInvOneClass.{u2} (H i) (DivisionMonoid.toDivInvOneMonoid.{u2} (H i) (Group.toDivisionMonoid.{u2} (H i) (_inst_4 i)))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.instHasSubsetSet.{u4} α) (HSMul.hSMul.{u1, u4, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Set.{u4} α) (Set.{u4} α) (instHSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Set.{u4} α) (Set.smulSet.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) α (MulAction.toSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) α (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) _inst_3)) _inst_5))) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) (fun (_x : H i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) _x) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (MulOneClass.toMul.{u2} (H i) (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (f i) h) (X j)) (X i)))) -> (forall {w : FreeProduct.Word.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))}, (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.Word.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) w)) (FunLike.coe.{max (max (succ u3) (succ u1)) (succ u2), max (succ u3) (succ u2), succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (fun (_x : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) _x) (MulHomClass.toFunLike.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (MulOneClass.toMul.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{max u3 u2, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (Equiv.{max (max (succ u3) (succ u2)) (succ u1), max (succ u1) (succ (max u2 u3))} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (fun (_x : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) _x) (Equiv.instFunLikeEquiv.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (FreeProduct.lift.{u3, u2, u1} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) f) (FreeProduct.Word.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) w)) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.Word.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) w)) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.Word.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) w)) (InvOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.Word.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) w)) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.Word.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) w)) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.Word.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) w)) (Group.toDivisionMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.Word.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) w)) _inst_3))))))) -> (Eq.{max (succ u3) (succ u2)} (FreeProduct.Word.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) w (FreeProduct.Word.empty.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))))))
+<too large>
 Case conversion may be inaccurate. Consider using '#align free_product.empty_of_word_prod_eq_one FreeProduct.empty_of_word_prod_eq_oneₓ'. -/
 theorem empty_of_word_prod_eq_one {w : Word H} (h : lift f w.Prod = 1) : w = Word.empty :=
   by
@@ -1135,10 +1088,7 @@ theorem empty_of_word_prod_eq_one {w : Word H} (h : lift f w.Prod = 1) : w = Wor
 #align free_product.empty_of_word_prod_eq_one FreeProduct.empty_of_word_prod_eq_one
 
 /- warning: free_product.lift_injective_of_ping_pong -> FreeProduct.lift_injective_of_ping_pong is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u1}} [hnontriv : Nontrivial.{u1} ι] {G : Type.{u2}} [_inst_3 : Group.{u2} G] {H : ι -> Type.{u3}} [_inst_4 : forall (i : ι), Group.{u3} (H i)] (f : forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))), (Or (LE.le.{succ u1} Cardinal.{u1} Cardinal.hasLe.{u1} (OfNat.ofNat.{succ u1} Cardinal.{u1} 3 (OfNat.mk.{succ u1} Cardinal.{u1} 3 (bit1.{succ u1} Cardinal.{u1} Cardinal.hasOne.{u1} Cardinal.hasAdd.{u1} (One.one.{succ u1} Cardinal.{u1} Cardinal.hasOne.{u1})))) (Cardinal.mk.{u1} ι)) (Exists.{succ u1} ι (fun (i : ι) => LE.le.{succ u3} Cardinal.{u3} Cardinal.hasLe.{u3} (OfNat.ofNat.{succ u3} Cardinal.{u3} 3 (OfNat.mk.{succ u3} Cardinal.{u3} 3 (bit1.{succ u3} Cardinal.{u3} Cardinal.hasOne.{u3} Cardinal.hasAdd.{u3} (One.one.{succ u3} Cardinal.{u3} Cardinal.hasOne.{u3})))) (Cardinal.mk.{u3} (H i))))) -> (forall {α : Type.{u4}} [_inst_5 : MulAction.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.completeBooleanAlgebra.{u4} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u4} (Set.{u4} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u4} (Set.{u4} α) (Set.booleanAlgebra.{u4} α))) (X i) (X j))) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u3} (H i) h (OfNat.ofNat.{u3} (H i) 1 (OfNat.mk.{u3} (H i) 1 (One.one.{u3} (H i) (MulOneClass.toHasOne.{u3} (H i) (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.hasSubset.{u4} α) (SMul.smul.{u2, u4} G (Set.{u4} α) (Set.smulSet.{u2, u4} G α (MulAction.toHasSmul.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)) _inst_5)) (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (H i) -> G) (MonoidHom.hasCoeToFun.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (f i) h) (X j)) (X i)))) -> (Function.Injective.{succ (max u1 u3), succ u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (coeFn.{max (succ u2) (succ (max u1 u3)), max (succ (max u1 u3)) (succ u2)} (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) -> G) (MonoidHom.hasCoeToFun.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (coeFn.{max 1 (max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))) (max (succ u2) (succ (max u1 u3))) (succ u1) (succ u2) (succ u3), max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))} (Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (fun (_x : Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) => (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) -> (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (FreeProduct.lift.{u1, u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) f))))
-but is expected to have type
-  forall {ι : Type.{u3}} [hnontriv : Nontrivial.{u3} ι] {G : Type.{u1}} [_inst_3 : Group.{u1} G] {H : ι -> Type.{u2}} [_inst_4 : forall (i : ι), Group.{u2} (H i)] (f : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))), (Or (LE.le.{succ u3} Cardinal.{u3} Cardinal.instLECardinal.{u3} (OfNat.ofNat.{succ u3} Cardinal.{u3} 3 (instOfNat.{succ u3} Cardinal.{u3} 3 Cardinal.instNatCastCardinal.{u3} (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))) (Cardinal.mk.{u3} ι)) (Exists.{succ u3} ι (fun (i : ι) => LE.le.{succ u2} Cardinal.{u2} Cardinal.instLECardinal.{u2} (OfNat.ofNat.{succ u2} Cardinal.{u2} 3 (instOfNat.{succ u2} Cardinal.{u2} 3 Cardinal.instNatCastCardinal.{u2} (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))) (Cardinal.mk.{u2} (H i))))) -> (forall {α : Type.{u4}} [_inst_5 : MulAction.{u1, u4} G α (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (BoundedOrder.toOrderBot.{u4} (Set.{u4} α) (Preorder.toLE.{u4} (Set.{u4} α) (PartialOrder.toPreorder.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))))) (CompleteLattice.toBoundedOrder.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (X i) (X j))) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u2} (H i) h (OfNat.ofNat.{u2} (H i) 1 (One.toOfNat1.{u2} (H i) (InvOneClass.toOne.{u2} (H i) (DivInvOneMonoid.toInvOneClass.{u2} (H i) (DivisionMonoid.toDivInvOneMonoid.{u2} (H i) (Group.toDivisionMonoid.{u2} (H i) (_inst_4 i)))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.instHasSubsetSet.{u4} α) (HSMul.hSMul.{u1, u4, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Set.{u4} α) (Set.{u4} α) (instHSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Set.{u4} α) (Set.smulSet.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) α (MulAction.toSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) α (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) _inst_3)) _inst_5))) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) (fun (_x : H i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) _x) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (MulOneClass.toMul.{u2} (H i) (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (f i) h) (X j)) (X i)))) -> (Function.Injective.{max (succ u3) (succ u2), succ u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (FunLike.coe.{max (max (succ u3) (succ u1)) (succ u2), max (succ u3) (succ u2), succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (fun (_x : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) _x) (MulHomClass.toFunLike.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (MulOneClass.toMul.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{max u3 u2, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (Equiv.{max (max (succ u3) (succ u2)) (succ u1), max (succ u1) (succ (max u2 u3))} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (fun (_x : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) _x) (Equiv.instFunLikeEquiv.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (FreeProduct.lift.{u3, u2, u1} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) f))))
+<too large>
 Case conversion may be inaccurate. Consider using '#align free_product.lift_injective_of_ping_pong FreeProduct.lift_injective_of_ping_pongₓ'. -/
 /-- The Ping-Pong-Lemma.
 
@@ -1237,10 +1187,7 @@ variable (hY : ∀ i, a⁻¹ i • X iᶜ ⊆ Y i)
 include hXnonempty hXdisj hYdisj hXYdisj hX hY
 
 /- warning: free_group.injective_lift_of_ping_pong -> FreeGroup.injective_lift_of_ping_pong is a dubious translation:
-lean 3 declaration is
-  forall {ι : Type.{u_1}} [_inst_3 : Nontrivial.{u_1} ι] {G : Type.{u_1}} [_inst_4 : Group.{u_1} G] (a : ι -> G) {α : Type.{u_4}} [_inst_5 : MulAction.{u_1, u_4} G α (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4))] (X : ι -> (Set.{u_4} α)) (Y : ι -> (Set.{u_4} α)), (forall (i : ι), Set.Nonempty.{u_4} α (X i)) -> (Pairwise.{u_1} ι (fun (i : ι) (j : ι) => Disjoint.{u_4} (Set.{u_4} α) (CompleteSemilatticeInf.toPartialOrder.{u_4} (Set.{u_4} α) (CompleteLattice.toCompleteSemilatticeInf.{u_4} (Set.{u_4} α) (Order.Coframe.toCompleteLattice.{u_4} (Set.{u_4} α) (CompleteDistribLattice.toCoframe.{u_4} (Set.{u_4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_4} (Set.{u_4} α) (Set.completeBooleanAlgebra.{u_4} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u_4} (Set.{u_4} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u_4} (Set.{u_4} α) (Set.booleanAlgebra.{u_4} α))) (X i) (X j))) -> (Pairwise.{u_1} ι (fun (i : ι) (j : ι) => Disjoint.{u_4} (Set.{u_4} α) (CompleteSemilatticeInf.toPartialOrder.{u_4} (Set.{u_4} α) (CompleteLattice.toCompleteSemilatticeInf.{u_4} (Set.{u_4} α) (Order.Coframe.toCompleteLattice.{u_4} (Set.{u_4} α) (CompleteDistribLattice.toCoframe.{u_4} (Set.{u_4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_4} (Set.{u_4} α) (Set.completeBooleanAlgebra.{u_4} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u_4} (Set.{u_4} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u_4} (Set.{u_4} α) (Set.booleanAlgebra.{u_4} α))) (Y i) (Y j))) -> (forall (i : ι) (j : ι), Disjoint.{u_4} (Set.{u_4} α) (CompleteSemilatticeInf.toPartialOrder.{u_4} (Set.{u_4} α) (CompleteLattice.toCompleteSemilatticeInf.{u_4} (Set.{u_4} α) (Order.Coframe.toCompleteLattice.{u_4} (Set.{u_4} α) (CompleteDistribLattice.toCoframe.{u_4} (Set.{u_4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_4} (Set.{u_4} α) (Set.completeBooleanAlgebra.{u_4} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u_4} (Set.{u_4} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u_4} (Set.{u_4} α) (Set.booleanAlgebra.{u_4} α))) (X i) (Y j)) -> (forall (i : ι), HasSubset.Subset.{u_4} (Set.{u_4} α) (Set.hasSubset.{u_4} α) (SMul.smul.{u_1, u_4} G (Set.{u_4} α) (Set.smulSet.{u_1, u_4} G α (MulAction.toHasSmul.{u_1, u_4} G α (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)) _inst_5)) (a i) (HasCompl.compl.{u_4} (Set.{u_4} α) (BooleanAlgebra.toHasCompl.{u_4} (Set.{u_4} α) (Set.booleanAlgebra.{u_4} α)) (Y i))) (X i)) -> (forall (i : ι), HasSubset.Subset.{u_4} (Set.{u_4} α) (Set.hasSubset.{u_4} α) (SMul.smul.{u_1, u_4} G (Set.{u_4} α) (Set.smulSet.{u_1, u_4} G α (MulAction.toHasSmul.{u_1, u_4} G α (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)) _inst_5)) (Inv.inv.{u_1} (ι -> G) (Pi.instInv.{u_1, u_1} ι (fun (ᾰ : ι) => G) (fun (i : ι) => DivInvMonoid.toHasInv.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4))) a i) (HasCompl.compl.{u_4} (Set.{u_4} α) (BooleanAlgebra.toHasCompl.{u_4} (Set.{u_4} α) (Set.booleanAlgebra.{u_4} α)) (X i))) (Y i)) -> (Function.Injective.{succ u_1, succ u_1} (FreeGroup.{u_1} ι) G (coeFn.{succ u_1, succ u_1} (MonoidHom.{u_1, u_1} (FreeGroup.{u_1} ι) G (Monoid.toMulOneClass.{u_1} (FreeGroup.{u_1} ι) (DivInvMonoid.toMonoid.{u_1} (FreeGroup.{u_1} ι) (Group.toDivInvMonoid.{u_1} (FreeGroup.{u_1} ι) (FreeGroup.group.{u_1} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)))) (fun (_x : MonoidHom.{u_1, u_1} (FreeGroup.{u_1} ι) G (Monoid.toMulOneClass.{u_1} (FreeGroup.{u_1} ι) (DivInvMonoid.toMonoid.{u_1} (FreeGroup.{u_1} ι) (Group.toDivInvMonoid.{u_1} (FreeGroup.{u_1} ι) (FreeGroup.group.{u_1} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)))) => (FreeGroup.{u_1} ι) -> G) (MonoidHom.hasCoeToFun.{u_1, u_1} (FreeGroup.{u_1} ι) G (Monoid.toMulOneClass.{u_1} (FreeGroup.{u_1} ι) (DivInvMonoid.toMonoid.{u_1} (FreeGroup.{u_1} ι) (Group.toDivInvMonoid.{u_1} (FreeGroup.{u_1} ι) (FreeGroup.group.{u_1} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)))) (coeFn.{max 1 (succ u_1), succ u_1} (Equiv.{succ u_1, succ u_1} (ι -> G) (MonoidHom.{u_1, u_1} (FreeGroup.{u_1} ι) G (Monoid.toMulOneClass.{u_1} (FreeGroup.{u_1} ι) (DivInvMonoid.toMonoid.{u_1} (FreeGroup.{u_1} ι) (Group.toDivInvMonoid.{u_1} (FreeGroup.{u_1} ι) (FreeGroup.group.{u_1} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4))))) (fun (_x : Equiv.{succ u_1, succ u_1} (ι -> G) (MonoidHom.{u_1, u_1} (FreeGroup.{u_1} ι) G (Monoid.toMulOneClass.{u_1} (FreeGroup.{u_1} ι) (DivInvMonoid.toMonoid.{u_1} (FreeGroup.{u_1} ι) (Group.toDivInvMonoid.{u_1} (FreeGroup.{u_1} ι) (FreeGroup.group.{u_1} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4))))) => (ι -> G) -> (MonoidHom.{u_1, u_1} (FreeGroup.{u_1} ι) G (Monoid.toMulOneClass.{u_1} (FreeGroup.{u_1} ι) (DivInvMonoid.toMonoid.{u_1} (FreeGroup.{u_1} ι) (Group.toDivInvMonoid.{u_1} (FreeGroup.{u_1} ι) (FreeGroup.group.{u_1} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4))))) (Equiv.hasCoeToFun.{succ u_1, succ u_1} (ι -> G) (MonoidHom.{u_1, u_1} (FreeGroup.{u_1} ι) G (Monoid.toMulOneClass.{u_1} (FreeGroup.{u_1} ι) (DivInvMonoid.toMonoid.{u_1} (FreeGroup.{u_1} ι) (Group.toDivInvMonoid.{u_1} (FreeGroup.{u_1} ι) (FreeGroup.group.{u_1} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4))))) (FreeGroup.lift.{u_1, u_1} ι G _inst_4) a)))
-but is expected to have type
-  forall {ι : Type.{u_2}} [_inst_3 : Nontrivial.{u_2} ι] {G : Type.{u_1}} [_inst_4 : Group.{u_1} G] (a : ι -> G) {α : Type.{u_3}} [_inst_5 : MulAction.{u_1, u_3} G α (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4))] (X : ι -> (Set.{u_3} α)) (Y : ι -> (Set.{u_3} α)), (forall (i : ι), Set.Nonempty.{u_3} α (X i)) -> (Pairwise.{u_2} ι (fun (i : ι) (j : ι) => Disjoint.{u_3} (Set.{u_3} α) (CompleteSemilatticeInf.toPartialOrder.{u_3} (Set.{u_3} α) (CompleteLattice.toCompleteSemilatticeInf.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))) (BoundedOrder.toOrderBot.{u_3} (Set.{u_3} α) (Preorder.toLE.{u_3} (Set.{u_3} α) (PartialOrder.toPreorder.{u_3} (Set.{u_3} α) (CompleteSemilatticeInf.toPartialOrder.{u_3} (Set.{u_3} α) (CompleteLattice.toCompleteSemilatticeInf.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))))) (CompleteLattice.toBoundedOrder.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))) (X i) (X j))) -> (Pairwise.{u_2} ι (fun (i : ι) (j : ι) => Disjoint.{u_3} (Set.{u_3} α) (CompleteSemilatticeInf.toPartialOrder.{u_3} (Set.{u_3} α) (CompleteLattice.toCompleteSemilatticeInf.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))) (BoundedOrder.toOrderBot.{u_3} (Set.{u_3} α) (Preorder.toLE.{u_3} (Set.{u_3} α) (PartialOrder.toPreorder.{u_3} (Set.{u_3} α) (CompleteSemilatticeInf.toPartialOrder.{u_3} (Set.{u_3} α) (CompleteLattice.toCompleteSemilatticeInf.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))))) (CompleteLattice.toBoundedOrder.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))) (Y i) (Y j))) -> (forall (i : ι) (j : ι), Disjoint.{u_3} (Set.{u_3} α) (CompleteSemilatticeInf.toPartialOrder.{u_3} (Set.{u_3} α) (CompleteLattice.toCompleteSemilatticeInf.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))) (BoundedOrder.toOrderBot.{u_3} (Set.{u_3} α) (Preorder.toLE.{u_3} (Set.{u_3} α) (PartialOrder.toPreorder.{u_3} (Set.{u_3} α) (CompleteSemilatticeInf.toPartialOrder.{u_3} (Set.{u_3} α) (CompleteLattice.toCompleteSemilatticeInf.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))))) (CompleteLattice.toBoundedOrder.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))) (X i) (Y j)) -> (forall (i : ι), HasSubset.Subset.{u_3} (Set.{u_3} α) (Set.instHasSubsetSet.{u_3} α) (HSMul.hSMul.{u_1, u_3, u_3} G (Set.{u_3} α) (Set.{u_3} α) (instHSMul.{u_1, u_3} G (Set.{u_3} α) (Set.smulSet.{u_1, u_3} G α (MulAction.toSMul.{u_1, u_3} G α (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)) _inst_5))) (a i) (HasCompl.compl.{u_3} (Set.{u_3} α) (BooleanAlgebra.toHasCompl.{u_3} (Set.{u_3} α) (Set.instBooleanAlgebraSet.{u_3} α)) (Y i))) (X i)) -> (forall (i : ι), HasSubset.Subset.{u_3} (Set.{u_3} α) (Set.instHasSubsetSet.{u_3} α) (HSMul.hSMul.{u_1, u_3, u_3} G (Set.{u_3} α) (Set.{u_3} α) (instHSMul.{u_1, u_3} G (Set.{u_3} α) (Set.smulSet.{u_1, u_3} G α (MulAction.toSMul.{u_1, u_3} G α (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)) _inst_5))) (Inv.inv.{max u_1 u_2} (ι -> G) (Pi.instInv.{u_2, u_1} ι (fun (ᾰ : ι) => G) (fun (i : ι) => InvOneClass.toInv.{u_1} G (DivInvOneMonoid.toInvOneClass.{u_1} G (DivisionMonoid.toDivInvOneMonoid.{u_1} G (Group.toDivisionMonoid.{u_1} G _inst_4))))) a i) (HasCompl.compl.{u_3} (Set.{u_3} α) (BooleanAlgebra.toHasCompl.{u_3} (Set.{u_3} α) (Set.instBooleanAlgebraSet.{u_3} α)) (X i))) (Y i)) -> (Function.Injective.{succ u_2, succ u_1} (FreeGroup.{u_2} ι) G (FunLike.coe.{max (succ u_1) (succ u_2), succ u_2, succ u_1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> G) => MonoidHom.{u_2, u_1} (FreeGroup.{u_2} ι) G (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)))) a) (FreeGroup.{u_2} ι) (fun (_x : FreeGroup.{u_2} ι) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeGroup.{u_2} ι) => G) _x) (MulHomClass.toFunLike.{max u_1 u_2, u_2, u_1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> G) => MonoidHom.{u_2, u_1} (FreeGroup.{u_2} ι) G (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)))) a) (FreeGroup.{u_2} ι) G (MulOneClass.toMul.{u_2} (FreeGroup.{u_2} ι) (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι))))) (MulOneClass.toMul.{u_1} G (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)))) (MonoidHomClass.toMulHomClass.{max u_1 u_2, u_2, u_1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> G) => MonoidHom.{u_2, u_1} (FreeGroup.{u_2} ι) G (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)))) a) (FreeGroup.{u_2} ι) G (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4))) (MonoidHom.monoidHomClass.{u_2, u_1} (FreeGroup.{u_2} ι) G (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)))))) (FunLike.coe.{max (succ u_1) (succ u_2), max (succ u_1) (succ u_2), max (succ u_1) (succ u_2)} (Equiv.{max (succ u_2) (succ u_1), max (succ u_1) (succ u_2)} (ι -> G) (MonoidHom.{u_2, u_1} (FreeGroup.{u_2} ι) G (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4))))) (ι -> G) (fun (_x : ι -> G) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> G) => MonoidHom.{u_2, u_1} (FreeGroup.{u_2} ι) G (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)))) _x) (Equiv.instFunLikeEquiv.{max (succ u_1) (succ u_2), max (succ u_1) (succ u_2)} (ι -> G) (MonoidHom.{u_2, u_1} (FreeGroup.{u_2} ι) G (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4))))) (FreeGroup.lift.{u_2, u_1} ι G _inst_4) a)))
+<too large>
 Case conversion may be inaccurate. Consider using '#align free_group.injective_lift_of_ping_pong FreeGroup.injective_lift_of_ping_pongₓ'. -/
 /-- The Ping-Pong-Lemma.
 
Diff
@@ -128,7 +128,7 @@ def of {i : ι} : M i →* FreeProduct M
 lean 3 declaration is
   forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} (m : M i), Eq.{succ (max u1 u2)} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m) (coeFn.{succ (max u1 u2), succ (max u1 u2)} (MonoidHom.{max u1 u2, max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))))))) (conGen.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u1, u2} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i)))))) (Con.mulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i)))))) (conGen.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u1, u2} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i))))) (fun (_x : MonoidHom.{max u1 u2, max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))))))) (conGen.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u1, u2} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i)))))) (Con.mulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i)))))) (conGen.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u1, u2} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i))))) => (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) -> (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))))))) (conGen.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u1, u2} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i))))) (MonoidHom.hasCoeToFun.{max u1 u2, max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))))))) (conGen.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u1, u2} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i)))))) (Con.mulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i)))))) (conGen.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u1, u2} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i))))) (Con.mk'.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i)))))) (conGen.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u1, u2} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (FreeMonoid.of.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i)) (Sigma.mk.{u1, u2} ι (fun {i : ι} => M i) i m)))
 but is expected to have type
-  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] {i : ι} (m : M i), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) m) (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) m) (FunLike.coe.{succ (max u1 u2), succ (max u1 u2), succ (max u1 u2)} (MonoidHom.{max u1 u2, max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (Con.mulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i))))) (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (fun (_x : FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) => Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) _x) (MulHomClass.toFunLike.{max u1 u2, max u1 u2, max u1 u2} (MonoidHom.{max u1 u2, max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (Con.mulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i))))) (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (MulOneClass.toMul.{max u1 u2} (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (Con.mulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i))))) (MonoidHomClass.toMulHomClass.{max u1 u2, max u1 u2, max u1 u2} (MonoidHom.{max u1 u2, max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (Con.mulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i))))) (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (Con.mulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (MonoidHom.monoidHomClass.{max u1 u2, max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (Con.mulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i))))))) (Con.mk'.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (FreeMonoid.of.{max u1 u2} (Sigma.{u2, u1} ι M) (Sigma.mk.{u2, u1} ι M i m)))
+  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] {i : ι} (m : M i), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) m) (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) m) (FunLike.coe.{succ (max u1 u2), succ (max u1 u2), succ (max u1 u2)} (MonoidHom.{max u1 u2, max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (Con.mulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i))))) (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (fun (_x : FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) => Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) _x) (MulHomClass.toFunLike.{max u1 u2, max u1 u2, max u1 u2} (MonoidHom.{max u1 u2, max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (Con.mulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i))))) (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (MulOneClass.toMul.{max u1 u2} (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (Con.mulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i))))) (MonoidHomClass.toMulHomClass.{max u1 u2, max u1 u2, max u1 u2} (MonoidHom.{max u1 u2, max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (Con.mulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i))))) (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (Con.mulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (MonoidHom.monoidHomClass.{max u1 u2, max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (Con.mulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i))))))) (Con.mk'.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (FreeMonoid.of.{max u1 u2} (Sigma.{u2, u1} ι M) (Sigma.mk.{u2, u1} ι M i m)))
 Case conversion may be inaccurate. Consider using '#align free_product.of_apply FreeProduct.of_applyₓ'. -/
 theorem of_apply {i} (m : M i) : of m = Con.mk' _ (FreeMonoid.of <| Sigma.mk i m) :=
   rfl
@@ -189,7 +189,7 @@ def lift : (∀ i, M i →* N) ≃ (FreeProduct M →* N)
 lean 3 declaration is
   forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {N : Type.{u3}} [_inst_3 : Monoid.{u3} N] (fi : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) {i : ι} (m : M i), Eq.{succ u3} N (coeFn.{max (succ u3) (succ (max u1 u2)), max (succ (max u1 u2)) (succ u3)} (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) (fun (_x : MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) => (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) -> N) (MonoidHom.hasCoeToFun.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) (coeFn.{max 1 (max (max (succ u1) (succ u3) (succ u2)) (succ u3) (succ (max u1 u2))) (max (succ u3) (succ (max u1 u2))) (succ u1) (succ u3) (succ u2), max (max (succ u1) (succ u3) (succ u2)) (succ u3) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (fun (_x : Equiv.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) => (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) -> (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (Equiv.hasCoeToFun.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (FreeProduct.lift.{u1, u2, u3} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i) N _inst_3) fi) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m)) (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (fun (_x : MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => (M i) -> N) (MonoidHom.hasCoeToFun.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (fi i) m)
 but is expected to have type
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {N : Type.{u3}} [_inst_3 : Monoid.{u3} N] (fi : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) {i : ι} (m : M i), Eq.{succ u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) => N) (FunLike.coe.{max (succ u2) (succ u1), succ u2, max (succ u2) (succ u1)} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (a : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) a) (MulHomClass.toFunLike.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m)) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (succ u1) (succ u2), succ u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) fi) (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (fun (_x : FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) => N) _x) (MulHomClass.toFunLike.{max (max u1 u2) u3, max u1 u2, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) fi) (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)))) (MulOneClass.toMul.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHomClass.toMulHomClass.{max (max u1 u2) u3, max u1 u2, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) fi) (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3) (MonoidHom.monoidHomClass.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)))) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1)} (Equiv.{max (max (succ u1) (succ u2)) (succ u3), max (succ u3) (succ (max u2 u1))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (fun (_x : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) _x) (Equiv.instFunLikeEquiv.{max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1)} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (FreeProduct.lift.{u1, u2, u3} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i) N _inst_3) fi) (FunLike.coe.{max (succ u2) (succ u1), succ u2, max (succ u2) (succ u1)} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m)) (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => N) _x) (MulHomClass.toFunLike.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (M i) N (MulOneClass.toMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MulOneClass.toMul.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3) (MonoidHom.monoidHomClass.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)))) (fi i) m)
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {N : Type.{u3}} [_inst_3 : Monoid.{u3} N] (fi : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) {i : ι} (m : M i), Eq.{succ u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) => N) (FunLike.coe.{max (succ u2) (succ u1), succ u2, max (succ u2) (succ u1)} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (a : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) a) (MulHomClass.toFunLike.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m)) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (succ u1) (succ u2), succ u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) fi) (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (fun (_x : FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) => N) _x) (MulHomClass.toFunLike.{max (max u1 u2) u3, max u1 u2, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) fi) (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)))) (MulOneClass.toMul.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHomClass.toMulHomClass.{max (max u1 u2) u3, max u1 u2, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) fi) (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3) (MonoidHom.monoidHomClass.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)))) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1)} (Equiv.{max (max (succ u1) (succ u2)) (succ u3), max (succ u3) (succ (max u2 u1))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (fun (_x : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) _x) (Equiv.instFunLikeEquiv.{max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1)} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (FreeProduct.lift.{u1, u2, u3} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i) N _inst_3) fi) (FunLike.coe.{max (succ u2) (succ u1), succ u2, max (succ u2) (succ u1)} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m)) (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => N) _x) (MulHomClass.toFunLike.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (M i) N (MulOneClass.toMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MulOneClass.toMul.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3) (MonoidHom.monoidHomClass.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)))) (fi i) m)
 Case conversion may be inaccurate. Consider using '#align free_product.lift_of FreeProduct.lift_ofₓ'. -/
 @[simp]
 theorem lift_of {N} [Monoid N] (fi : ∀ i, M i →* N) {i} (m : M i) : lift fi (of m) = fi i m := by
@@ -200,7 +200,7 @@ theorem lift_of {N} [Monoid N] (fi : ∀ i, M i →* N) {i} (m : M i) : lift fi
 lean 3 declaration is
   forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {C : (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) -> Prop} (m : FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)), (C (OfNat.ofNat.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) 1 (OfNat.mk.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) 1 (One.one.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toHasOne.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))))))) -> (forall (i : ι) (m : M i), C (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m)) -> (forall (x : FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (y : FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)), (C x) -> (C y) -> (C (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instHMul.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toHasMul.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i))))) x y))) -> (C m)
 but is expected to have type
-  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] {C : (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) -> Prop} (m : FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)), (C (OfNat.ofNat.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) 1 (One.toOfNat1.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toOne.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))) -> (forall (i : ι) (m : M i), C (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) m)) -> (forall (x : FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (y : FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)), (C x) -> (C y) -> (C (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instHMul.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))))) x y))) -> (C m)
+  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] {C : (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) -> Prop} (m : FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)), (C (OfNat.ofNat.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) 1 (One.toOfNat1.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toOne.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))) -> (forall (i : ι) (m : M i), C (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) m)) -> (forall (x : FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (y : FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)), (C x) -> (C y) -> (C (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instHMul.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))))) x y))) -> (C m)
 Case conversion may be inaccurate. Consider using '#align free_product.induction_on FreeProduct.induction_onₓ'. -/
 @[elab_as_elim]
 theorem induction_on {C : FreeProduct M → Prop} (m : FreeProduct M) (h_one : C 1)
@@ -218,7 +218,7 @@ theorem induction_on {C : FreeProduct M → Prop} (m : FreeProduct M) (h_one : C
 lean 3 declaration is
   forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : DecidableEq.{succ u1} ι] (i : ι), Function.LeftInverse.{succ u2, succ (max u1 u2)} (M i) (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (coeFn.{max (succ u2) (succ (max u1 u2)), max (succ (max u1 u2)) (succ u2)} (MonoidHom.{max u1 u2, u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (fun (_x : MonoidHom.{max u1 u2, u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) => (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) -> (M i)) (MonoidHom.hasCoeToFun.{max u1 u2, u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ u2) (succ (max u1 u2))) (max (succ u2) (succ (max u1 u2))) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ u2) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ (max u1 u2))} (forall (i_1 : ι), MonoidHom.{u2, u2} (M i_1) (M i) (Monoid.toMulOneClass.{u2} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MonoidHom.{max u1 u2, u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)))) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u2) (succ (max u1 u2))} (forall (i_1 : ι), MonoidHom.{u2, u2} (M i_1) (M i) (Monoid.toMulOneClass.{u2} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MonoidHom.{max u1 u2, u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)))) => (forall (i_1 : ι), MonoidHom.{u2, u2} (M i_1) (M i) (Monoid.toMulOneClass.{u2} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) -> (MonoidHom.{max u1 u2, u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u2) (succ (max u1 u2))} (forall (i_1 : ι), MonoidHom.{u2, u2} (M i_1) (M i) (Monoid.toMulOneClass.{u2} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MonoidHom.{max u1 u2, u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)))) (FreeProduct.lift.{u1, u2, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i) (M i) (_inst_1 i)) (Pi.mulSingle.{u1, u2} ι (fun (i_1 : ι) => MonoidHom.{u2, u2} (M i_1) (M i) (Monoid.toMulOneClass.{u2} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (fun (a : ι) (b : ι) => _inst_3 a b) (fun (i_1 : ι) => MonoidHom.hasOne.{u2, u2} (M i_1) (M i) (Monoid.toMulOneClass.{u2} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) i (MonoidHom.id.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)))))) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i))
 but is expected to have type
-  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] [_inst_3 : DecidableEq.{succ u2} ι] (i : ι), Function.LeftInverse.{succ u1, max (succ u2) (succ u1)} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i_1 : ι), MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) => MonoidHom.{max u1 u2, u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (Pi.mulSingle.{u2, u1} ι (fun (i_1 : ι) => MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (fun (a : ι) (b : ι) => _inst_3 a b) (fun (i_1 : ι) => instOneMonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) i (MonoidHom.id.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))))) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (fun (_x : FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => M i) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i_1 : ι), MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) => MonoidHom.{max u1 u2, u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (Pi.mulSingle.{u2, u1} ι (fun (i_1 : ι) => MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (fun (a : ι) (b : ι) => _inst_3 a b) (fun (i_1 : ι) => instOneMonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) i (MonoidHom.id.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))))) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MonoidHomClass.toMulHomClass.{max u2 u1, max u2 u1, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i_1 : ι), MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) => MonoidHom.{max u1 u2, u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (Pi.mulSingle.{u2, u1} ι (fun (i_1 : ι) => MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (fun (a : ι) (b : ι) => _inst_3 a b) (fun (i_1 : ι) => instOneMonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) i (MonoidHom.id.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))))) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (MonoidHom.monoidHomClass.{max u2 u1, u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))))) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u2) (succ u1), max (succ u1) (succ (max u1 u2))} (forall (i_1 : ι), MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MonoidHom.{max u1 u2, u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)))) (forall (i_1 : ι), MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (fun (_x : forall (i_1 : ι), MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i_1 : ι), MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) => MonoidHom.{max u1 u2, u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (forall (i_1 : ι), MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MonoidHom.{max u1 u2, u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)))) (FreeProduct.lift.{u2, u1, u1} ι M (fun (i : ι) => _inst_1 i) (M i) (_inst_1 i)) (Pi.mulSingle.{u2, u1} ι (fun (i_1 : ι) => MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (fun (a : ι) (b : ι) => _inst_3 a b) (fun (i_1 : ι) => instOneMonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) i (MonoidHom.id.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)))))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i))
+  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] [_inst_3 : DecidableEq.{succ u2} ι] (i : ι), Function.LeftInverse.{succ u1, max (succ u2) (succ u1)} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i_1 : ι), MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) => MonoidHom.{max u1 u2, u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (Pi.mulSingle.{u2, u1} ι (fun (i_1 : ι) => MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (fun (a : ι) (b : ι) => _inst_3 a b) (fun (i_1 : ι) => instOneMonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) i (MonoidHom.id.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))))) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (fun (_x : FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => M i) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i_1 : ι), MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) => MonoidHom.{max u1 u2, u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (Pi.mulSingle.{u2, u1} ι (fun (i_1 : ι) => MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (fun (a : ι) (b : ι) => _inst_3 a b) (fun (i_1 : ι) => instOneMonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) i (MonoidHom.id.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))))) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MonoidHomClass.toMulHomClass.{max u2 u1, max u2 u1, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i_1 : ι), MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) => MonoidHom.{max u1 u2, u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (Pi.mulSingle.{u2, u1} ι (fun (i_1 : ι) => MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (fun (a : ι) (b : ι) => _inst_3 a b) (fun (i_1 : ι) => instOneMonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) i (MonoidHom.id.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))))) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (MonoidHom.monoidHomClass.{max u2 u1, u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))))) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u2) (succ u1), max (succ u1) (succ (max u1 u2))} (forall (i_1 : ι), MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MonoidHom.{max u1 u2, u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)))) (forall (i_1 : ι), MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (fun (_x : forall (i_1 : ι), MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i_1 : ι), MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) => MonoidHom.{max u1 u2, u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (forall (i_1 : ι), MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MonoidHom.{max u1 u2, u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)))) (FreeProduct.lift.{u2, u1, u1} ι M (fun (i : ι) => _inst_1 i) (M i) (_inst_1 i)) (Pi.mulSingle.{u2, u1} ι (fun (i_1 : ι) => MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (fun (a : ι) (b : ι) => _inst_3 a b) (fun (i_1 : ι) => instOneMonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) i (MonoidHom.id.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)))))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i))
 Case conversion may be inaccurate. Consider using '#align free_product.of_left_inverse FreeProduct.of_leftInverseₓ'. -/
 theorem of_leftInverse [DecidableEq ι] (i : ι) :
     Function.LeftInverse (lift <| Pi.mulSingle i (MonoidHom.id (M i))) of := fun x => by
@@ -229,7 +229,7 @@ theorem of_leftInverse [DecidableEq ι] (i : ι) :
 lean 3 declaration is
   forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] (i : ι), Function.Injective.{succ u2, succ (max u1 u2)} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i))
 but is expected to have type
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] (i : ι), Function.Injective.{succ u2, max (succ u1) (succ u2)} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FunLike.coe.{max (succ u1) (succ u2), succ u2, max (succ u1) (succ u2)} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u1 u2, u2, max u1 u2} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, max u1 u2} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i))
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] (i : ι), Function.Injective.{succ u2, max (succ u1) (succ u2)} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FunLike.coe.{max (succ u1) (succ u2), succ u2, max (succ u1) (succ u2)} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u1 u2, u2, max u1 u2} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, max u1 u2} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i))
 Case conversion may be inaccurate. Consider using '#align free_product.of_injective FreeProduct.of_injectiveₓ'. -/
 theorem of_injective (i : ι) : Function.Injective ⇑(of : M i →* _) := by
   classical exact (of_left_inverse i).Injective
@@ -239,7 +239,7 @@ theorem of_injective (i : ι) : Function.Injective ⇑(of : M i →* _) := by
 lean 3 declaration is
   forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {N : Type.{u3}} [_inst_3 : Monoid.{u3} N] (f : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) {s : Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)}, (forall (i : ι), LE.le.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (Preorder.toHasLe.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (SetLike.partialOrder.{u3, u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) N (Submonoid.setLike.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3))))) (MonoidHom.mrange.{u2, u3, max u3 u2} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3) (MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.monoidHomClass.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (f i)) s) -> (LE.le.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (Preorder.toHasLe.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (SetLike.partialOrder.{u3, u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) N (Submonoid.setLike.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3))))) (MonoidHom.mrange.{max u1 u2, u3, max u3 u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.monoidHomClass.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) (coeFn.{max 1 (max (max (succ u1) (succ u3) (succ u2)) (succ u3) (succ (max u1 u2))) (max (succ u3) (succ (max u1 u2))) (succ u1) (succ u3) (succ u2), max (max (succ u1) (succ u3) (succ u2)) (succ u3) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (fun (_x : Equiv.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) => (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) -> (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (Equiv.hasCoeToFun.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (FreeProduct.lift.{u1, u2, u3} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i) N _inst_3) f)) s)
 but is expected to have type
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {N : Type.{u3}} [_inst_3 : Monoid.{u3} N] (f : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) {s : Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)}, (forall (i : ι), LE.le.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (Preorder.toLE.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (Submonoid.instCompleteLatticeSubmonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)))))) (MonoidHom.mrange.{u2, u3, max u2 u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3) (MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.monoidHomClass.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (f i)) s) -> (LE.le.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (Preorder.toLE.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (Submonoid.instCompleteLatticeSubmonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)))))) (MonoidHom.mrange.{max u1 u2, u3, max (max u1 u2) u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3) ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) f) (MonoidHom.monoidHomClass.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1)} (Equiv.{max (max (succ u1) (succ u2)) (succ u3), max (succ u3) (succ (max u2 u1))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (fun (_x : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) _x) (Equiv.instFunLikeEquiv.{max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1)} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (FreeProduct.lift.{u1, u2, u3} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i) N _inst_3) f)) s)
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {N : Type.{u3}} [_inst_3 : Monoid.{u3} N] (f : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) {s : Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)}, (forall (i : ι), LE.le.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (Preorder.toLE.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (Submonoid.instCompleteLatticeSubmonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)))))) (MonoidHom.mrange.{u2, u3, max u2 u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3) (MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.monoidHomClass.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (f i)) s) -> (LE.le.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (Preorder.toLE.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (Submonoid.instCompleteLatticeSubmonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)))))) (MonoidHom.mrange.{max u1 u2, u3, max (max u1 u2) u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3) ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) f) (MonoidHom.monoidHomClass.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1)} (Equiv.{max (max (succ u1) (succ u2)) (succ u3), max (succ u3) (succ (max u2 u1))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (fun (_x : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) _x) (Equiv.instFunLikeEquiv.{max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1)} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (FreeProduct.lift.{u1, u2, u3} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i) N _inst_3) f)) s)
 Case conversion may be inaccurate. Consider using '#align free_product.lift_mrange_le FreeProduct.lift_mrange_leₓ'. -/
 theorem lift_mrange_le {N} [Monoid N] (f : ∀ i, M i →* N) {s : Submonoid N}
     (h : ∀ i, (f i).mrange ≤ s) : (lift f).mrange ≤ s :=
@@ -275,7 +275,7 @@ instance : Inv (FreeProduct G)
 lean 3 declaration is
   forall {ι : Type.{u1}} (G : ι -> Type.{u2}) [_inst_3 : forall (i : ι), Group.{u2} (G i)] (x : FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))), Eq.{succ (max u1 u2)} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Inv.inv.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.hasInv.{u1, u2} ι G (fun (i : ι) => _inst_3 i)) x) (MulOpposite.unop.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (coeFn.{succ (max u1 u2), succ (max u1 u2)} (MonoidHom.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))))) (fun (_x : MonoidHom.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))))) => (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) -> (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))) (MonoidHom.hasCoeToFun.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))))) (coeFn.{max 1 (max (max (succ u1) (succ (max u1 u2)) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ (max u1 u2)) (succ u2), max (max (succ u1) (succ (max u1 u2)) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ (max u1 u2)) (succ u2), succ (max u1 u2)} (forall (i : ι), MonoidHom.{u2, max u1 u2} (G i) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))))) (MonoidHom.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))))) (fun (_x : Equiv.{max (succ u1) (succ (max u1 u2)) (succ u2), succ (max u1 u2)} (forall (i : ι), MonoidHom.{u2, max u1 u2} (G i) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))))) (MonoidHom.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))))) => (forall (i : ι), MonoidHom.{u2, max u1 u2} (G i) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))))) -> (MonoidHom.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))))) (Equiv.hasCoeToFun.{max (succ u1) (succ (max u1 u2)) (succ u2), succ (max u1 u2)} (forall (i : ι), MonoidHom.{u2, max u1 u2} (G i) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))))) (MonoidHom.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))))) (FreeProduct.lift.{u1, u2, max u1 u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))) (fun (i : ι) => MonoidHom.comp.{u2, u2, max u1 u2} (G i) (MulOpposite.{u2} (G i)) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u2} (G i) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))) (coeFn.{max 1 (succ (max u1 u2)) (succ u2), max (succ (max u1 u2)) (succ u2)} (Equiv.{max (succ (max u1 u2)) (succ u2), max (succ (max u1 u2)) (succ u2)} (MonoidHom.{u2, max u1 u2} (G i) (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))) (MonoidHom.{u2, max u1 u2} (MulOpposite.{u2} (G i)) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u2} (G i) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))))) (fun (_x : Equiv.{max (succ (max u1 u2)) (succ u2), max (succ (max u1 u2)) (succ u2)} (MonoidHom.{u2, max u1 u2} (G i) (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))) (MonoidHom.{u2, max u1 u2} (MulOpposite.{u2} (G i)) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u2} (G i) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))))) => (MonoidHom.{u2, max u1 u2} (G i) (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))) -> (MonoidHom.{u2, max u1 u2} (MulOpposite.{u2} (G i)) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u2} (G i) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))))) (Equiv.hasCoeToFun.{max (succ (max u1 u2)) (succ u2), max (succ (max u1 u2)) (succ u2)} (MonoidHom.{u2, max u1 u2} (G i) (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))) (MonoidHom.{u2, max u1 u2} (MulOpposite.{u2} (G i)) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u2} (G i) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))))) (MonoidHom.op.{u2, max u1 u2} (G i) (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))) (FreeProduct.of.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) i)) (MulEquiv.toMonoidHom.{u2, u2} (G i) (MulOpposite.{u2} (G i)) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u2} (G i) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulEquiv.inv'.{u2} (G i) (Group.toDivisionMonoid.{u2} (G i) (_inst_3 i)))))) x))
 but is expected to have type
-  forall {ι : Type.{u2}} (G : ι -> Type.{u1}) [_inst_3 : forall (i : ι), Group.{u1} (G i)] (x : FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))), Eq.{max (succ u2) (succ u1)} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Inv.inv.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (FreeProduct.instInvFreeProductToMonoidToDivInvMonoid.{u2, u1} ι G (fun (i : ι) => _inst_3 i)) x) (MulOpposite.unop.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) => MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (fun (i : ι) => MonoidHom.comp.{u1, u1, max u2 u1} (G i) (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FunLike.coe.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (Equiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (fun (a : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) a) (Equiv.instFunLikeEquiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.op.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.of.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i)) (MulEquiv.toMonoidHom.{u1, u1} (G i) (MulOpposite.{u1} (G i)) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulEquiv.inv'.{u1} (G i) (Group.toDivisionMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (fun (_x : FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) => MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) => MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (fun (i : ι) => MonoidHom.comp.{u1, u1, max u2 u1} (G i) (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FunLike.coe.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (Equiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (fun (a : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) a) (Equiv.instFunLikeEquiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.op.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.of.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i)) (MulEquiv.toMonoidHom.{u1, u1} (G i) (MulOpposite.{u1} (G i)) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulEquiv.inv'.{u1} (G i) (Group.toDivisionMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MulOneClass.toMul.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (MonoidHomClass.toMulHomClass.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) => MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (fun (i : ι) => MonoidHom.comp.{u1, u1, max u2 u1} (G i) (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FunLike.coe.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (Equiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (fun (a : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) a) (Equiv.instFunLikeEquiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.op.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.of.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i)) (MulEquiv.toMonoidHom.{u1, u1} (G i) (MulOpposite.{u1} (G i)) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulEquiv.inv'.{u1} (G i) (Group.toDivisionMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.monoidHomClass.{max u2 u1, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))))) (FunLike.coe.{max (max (succ (max u2 u1)) (succ u1)) (succ u2), max (max (succ (max u2 u1)) (succ u1)) (succ u2), max (max (succ (max u2 u1)) (succ u1)) (succ u2)} (Equiv.{max (max (succ u2) (succ u1)) (succ (max u2 u1)), max (succ (max u2 u1)) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (fun (_x : forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) => MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) _x) (Equiv.instFunLikeEquiv.{max (max (succ (max u2 u1)) (succ u1)) (succ u2), max (max (succ (max u2 u1)) (succ u1)) (succ u2)} (forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (FreeProduct.lift.{u2, u1, max u2 u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (fun (i : ι) => MonoidHom.comp.{u1, u1, max u2 u1} (G i) (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FunLike.coe.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (Equiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (fun (_x : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) _x) (Equiv.instFunLikeEquiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.op.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.of.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i)) (MulEquiv.toMonoidHom.{u1, u1} (G i) (MulOpposite.{u1} (G i)) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulEquiv.inv'.{u1} (G i) (Group.toDivisionMonoid.{u1} (G i) (_inst_3 i)))))) x))
+  forall {ι : Type.{u2}} (G : ι -> Type.{u1}) [_inst_3 : forall (i : ι), Group.{u1} (G i)] (x : FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))), Eq.{max (succ u2) (succ u1)} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Inv.inv.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (FreeProduct.instInvFreeProductToMonoidToDivInvMonoid.{u2, u1} ι G (fun (i : ι) => _inst_3 i)) x) (MulOpposite.unop.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) => MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (fun (i : ι) => MonoidHom.comp.{u1, u1, max u2 u1} (G i) (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FunLike.coe.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (Equiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (fun (a : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) a) (Equiv.instFunLikeEquiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.op.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.of.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i)) (MulEquiv.toMonoidHom.{u1, u1} (G i) (MulOpposite.{u1} (G i)) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulEquiv.inv'.{u1} (G i) (Group.toDivisionMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (fun (_x : FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) => MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) => MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (fun (i : ι) => MonoidHom.comp.{u1, u1, max u2 u1} (G i) (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FunLike.coe.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (Equiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (fun (a : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) a) (Equiv.instFunLikeEquiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.op.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.of.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i)) (MulEquiv.toMonoidHom.{u1, u1} (G i) (MulOpposite.{u1} (G i)) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulEquiv.inv'.{u1} (G i) (Group.toDivisionMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MulOneClass.toMul.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (MonoidHomClass.toMulHomClass.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) => MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (fun (i : ι) => MonoidHom.comp.{u1, u1, max u2 u1} (G i) (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FunLike.coe.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (Equiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (fun (a : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) a) (Equiv.instFunLikeEquiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.op.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.of.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i)) (MulEquiv.toMonoidHom.{u1, u1} (G i) (MulOpposite.{u1} (G i)) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulEquiv.inv'.{u1} (G i) (Group.toDivisionMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.monoidHomClass.{max u2 u1, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))))) (FunLike.coe.{max (max (succ (max u2 u1)) (succ u1)) (succ u2), max (max (succ (max u2 u1)) (succ u1)) (succ u2), max (max (succ (max u2 u1)) (succ u1)) (succ u2)} (Equiv.{max (max (succ u2) (succ u1)) (succ (max u2 u1)), max (succ (max u2 u1)) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (fun (_x : forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) => MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) _x) (Equiv.instFunLikeEquiv.{max (max (succ (max u2 u1)) (succ u1)) (succ u2), max (max (succ (max u2 u1)) (succ u1)) (succ u2)} (forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (FreeProduct.lift.{u2, u1, max u2 u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (fun (i : ι) => MonoidHom.comp.{u1, u1, max u2 u1} (G i) (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FunLike.coe.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (Equiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (fun (_x : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) _x) (Equiv.instFunLikeEquiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.op.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.of.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i)) (MulEquiv.toMonoidHom.{u1, u1} (G i) (MulOpposite.{u1} (G i)) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulEquiv.inv'.{u1} (G i) (Group.toDivisionMonoid.{u1} (G i) (_inst_3 i)))))) x))
 Case conversion may be inaccurate. Consider using '#align free_product.inv_def FreeProduct.inv_defₓ'. -/
 theorem inv_def (x : FreeProduct G) :
     x⁻¹ =
@@ -302,7 +302,7 @@ instance : Group (FreeProduct G) :=
 lean 3 declaration is
   forall {ι : Type.{u1}} (G : ι -> Type.{u2}) [_inst_3 : forall (i : ι), Group.{u2} (G i)] {N : Type.{u3}} [_inst_4 : Group.{u3} N] (f : forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) {s : Subgroup.{u3} N _inst_4}, (forall (i : ι), LE.le.{u3} (Subgroup.{u3} N _inst_4) (Preorder.toHasLe.{u3} (Subgroup.{u3} N _inst_4) (PartialOrder.toPreorder.{u3} (Subgroup.{u3} N _inst_4) (SetLike.partialOrder.{u3, u3} (Subgroup.{u3} N _inst_4) N (Subgroup.setLike.{u3} N _inst_4)))) (MonoidHom.range.{u2, u3} (G i) (_inst_3 i) N _inst_4 (f i)) s) -> (LE.le.{u3} (Subgroup.{u3} N _inst_4) (Preorder.toHasLe.{u3} (Subgroup.{u3} N _inst_4) (PartialOrder.toPreorder.{u3} (Subgroup.{u3} N _inst_4) (SetLike.partialOrder.{u3, u3} (Subgroup.{u3} N _inst_4) N (Subgroup.setLike.{u3} N _inst_4)))) (MonoidHom.range.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.group.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => _inst_3 i)) N _inst_4 (coeFn.{max 1 (max (max (succ u1) (succ u3) (succ u2)) (succ u3) (succ (max u1 u2))) (max (succ u3) (succ (max u1 u2))) (succ u1) (succ u3) (succ u2), max (max (succ u1) (succ u3) (succ u2)) (succ u3) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))))) (fun (_x : Equiv.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))))) => (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) -> (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))))) (Equiv.hasCoeToFun.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))))) (FreeProduct.lift.{u1, u2, u3} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))) f)) s)
 but is expected to have type
-  forall {ι : Type.{u1}} (G : ι -> Type.{u2}) [_inst_3 : forall (i : ι), Group.{u2} (G i)] {N : Type.{u3}} [_inst_4 : Group.{u3} N] (f : forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) {s : Subgroup.{u3} N _inst_4}, (forall (i : ι), LE.le.{u3} (Subgroup.{u3} N _inst_4) (Preorder.toLE.{u3} (Subgroup.{u3} N _inst_4) (PartialOrder.toPreorder.{u3} (Subgroup.{u3} N _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u3} (Subgroup.{u3} N _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Subgroup.{u3} N _inst_4) (Subgroup.instCompleteLatticeSubgroup.{u3} N _inst_4))))) (MonoidHom.range.{u2, u3} (G i) (_inst_3 i) N _inst_4 (f i)) s) -> (LE.le.{u3} (Subgroup.{u3} N _inst_4) (Preorder.toLE.{u3} (Subgroup.{u3} N _inst_4) (PartialOrder.toPreorder.{u3} (Subgroup.{u3} N _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u3} (Subgroup.{u3} N _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Subgroup.{u3} N _inst_4) (Subgroup.instCompleteLatticeSubgroup.{u3} N _inst_4))))) (MonoidHom.range.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.instGroupFreeProductToMonoidToDivInvMonoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => _inst_3 i)) N _inst_4 (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1)} (Equiv.{max (max (succ u1) (succ u2)) (succ u3), max (succ u3) (succ (max u2 u1))} (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) (MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))))) (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) (fun (_x : forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) => MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) _x) (Equiv.instFunLikeEquiv.{max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1)} (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) (MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))))) (FreeProduct.lift.{u1, u2, u3} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))) f)) s)
+  forall {ι : Type.{u1}} (G : ι -> Type.{u2}) [_inst_3 : forall (i : ι), Group.{u2} (G i)] {N : Type.{u3}} [_inst_4 : Group.{u3} N] (f : forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) {s : Subgroup.{u3} N _inst_4}, (forall (i : ι), LE.le.{u3} (Subgroup.{u3} N _inst_4) (Preorder.toLE.{u3} (Subgroup.{u3} N _inst_4) (PartialOrder.toPreorder.{u3} (Subgroup.{u3} N _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u3} (Subgroup.{u3} N _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Subgroup.{u3} N _inst_4) (Subgroup.instCompleteLatticeSubgroup.{u3} N _inst_4))))) (MonoidHom.range.{u2, u3} (G i) (_inst_3 i) N _inst_4 (f i)) s) -> (LE.le.{u3} (Subgroup.{u3} N _inst_4) (Preorder.toLE.{u3} (Subgroup.{u3} N _inst_4) (PartialOrder.toPreorder.{u3} (Subgroup.{u3} N _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u3} (Subgroup.{u3} N _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Subgroup.{u3} N _inst_4) (Subgroup.instCompleteLatticeSubgroup.{u3} N _inst_4))))) (MonoidHom.range.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.instGroupFreeProductToMonoidToDivInvMonoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => _inst_3 i)) N _inst_4 (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1)} (Equiv.{max (max (succ u1) (succ u2)) (succ u3), max (succ u3) (succ (max u2 u1))} (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) (MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))))) (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) (fun (_x : forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) => MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) _x) (Equiv.instFunLikeEquiv.{max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1)} (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) (MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))))) (FreeProduct.lift.{u1, u2, u3} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))) f)) s)
 Case conversion may be inaccurate. Consider using '#align free_product.lift_range_le FreeProduct.lift_range_leₓ'. -/
 theorem lift_range_le {N} [Group N] (f : ∀ i, G i →* N) {s : Subgroup N}
     (h : ∀ i, (f i).range ≤ s) : (lift f).range ≤ s :=
@@ -445,7 +445,7 @@ theorem cons_eq_rcons {i} {m : M i} {ls h1 h2} :
 lean 3 declaration is
   forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] {i : ι} (p : FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i), Eq.{succ (max u1 u2)} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.prod.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (FreeProduct.Word.rcons.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i p)) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instHMul.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toHasMul.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i))))) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.Pair.head.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i p)) (FreeProduct.Word.prod.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (FreeProduct.Word.Pair.tail.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i p)))
 but is expected to have type
-  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u1} (M i)] {i : ι} (p : FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i), Eq.{max (succ u2) (succ u1)} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.prod.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (FreeProduct.Word.rcons.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i p)) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i p)) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i p)) (instHMul.{max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i p)) (MulOneClass.toMul.{max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i p)) (Monoid.toMulOneClass.{max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i p)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.Pair.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i p)) (FreeProduct.Word.prod.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (FreeProduct.Word.Pair.tail.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i p)))
+  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u1} (M i)] {i : ι} (p : FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i), Eq.{max (succ u2) (succ u1)} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.prod.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (FreeProduct.Word.rcons.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i p)) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i p)) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i p)) (instHMul.{max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i p)) (MulOneClass.toMul.{max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i p)) (Monoid.toMulOneClass.{max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i p)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.Pair.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i p)) (FreeProduct.Word.prod.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (FreeProduct.Word.Pair.tail.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i p)))
 Case conversion may be inaccurate. Consider using '#align free_product.word.prod_rcons FreeProduct.Word.prod_rconsₓ'. -/
 @[simp]
 theorem prod_rcons {i} (p : Pair M i) : prod (rcons p) = of p.headI * prod p.tail :=
@@ -515,7 +515,7 @@ def equivPair (i) : Word M ≃ Pair M i
 lean 3 declaration is
   forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] [_inst_4 : DecidableEq.{succ u1} ι] (i : ι) (p : FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i), Eq.{max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (coeFn.{max 1 (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) => (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) -> (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (Equiv.symm.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.equivPair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i)) p) (FreeProduct.Word.rcons.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i p)
 but is expected to have type
-  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u1} (M i)] [_inst_4 : DecidableEq.{succ u2} ι] (i : ι) (p : FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) => FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) p) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) (fun (_x : FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) => FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.equivPair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i)) p) (FreeProduct.Word.rcons.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i p)
+  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u1} (M i)] [_inst_4 : DecidableEq.{succ u2} ι] (i : ι) (p : FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) => FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) p) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) (fun (_x : FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) => FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.equivPair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i)) p) (FreeProduct.Word.rcons.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i p)
 Case conversion may be inaccurate. Consider using '#align free_product.word.equiv_pair_symm FreeProduct.Word.equivPair_symmₓ'. -/
 theorem equivPair_symm (i) (p : Pair M i) : (equivPair i).symm p = rcons p :=
   rfl
@@ -525,7 +525,7 @@ theorem equivPair_symm (i) (p : Pair M i) : (equivPair i).symm p = rcons p :=
 lean 3 declaration is
   forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] [_inst_4 : DecidableEq.{succ u1} ι] {i : ι} {w : FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)} (h : Ne.{succ u1} (Option.{u1} ι) (FreeProduct.Word.fstIdx.{u1, u2} ι M (fun (i : ι) => _inst_1 i) w) (Option.some.{u1} ι i)), Eq.{max (succ u1) (succ u2)} (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) (coeFn.{max 1 (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) => (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) -> (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.equivPair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i) w) (FreeProduct.Word.Pair.mk.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i (OfNat.ofNat.{u2} (M i) 1 (OfNat.mk.{u2} (M i) 1 (One.one.{u2} (M i) (MulOneClass.toHasOne.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)))))) w h)
 but is expected to have type
-  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u1} (M i)] [_inst_4 : DecidableEq.{succ u2} ι] {i : ι} {w : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)} (h : Ne.{succ u2} (Option.{u2} ι) (FreeProduct.Word.fstIdx.{u2, u1} ι M (fun (i : ι) => _inst_1 i) w) (Option.some.{u2} ι i)), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) w) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (fun (_x : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.equivPair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i) w) (FreeProduct.Word.Pair.mk.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i (OfNat.ofNat.{u1} (M i) 1 (One.toOfNat1.{u1} (M i) (Monoid.toOne.{u1} (M i) (_inst_1 i)))) w h)
+  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u1} (M i)] [_inst_4 : DecidableEq.{succ u2} ι] {i : ι} {w : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)} (h : Ne.{succ u2} (Option.{u2} ι) (FreeProduct.Word.fstIdx.{u2, u1} ι M (fun (i : ι) => _inst_1 i) w) (Option.some.{u2} ι i)), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) w) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (fun (_x : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.equivPair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i) w) (FreeProduct.Word.Pair.mk.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i (OfNat.ofNat.{u1} (M i) 1 (One.toOfNat1.{u1} (M i) (Monoid.toOne.{u1} (M i) (_inst_1 i)))) w h)
 Case conversion may be inaccurate. Consider using '#align free_product.word.equiv_pair_eq_of_fst_idx_ne FreeProduct.Word.equivPair_eq_of_fstIdx_neₓ'. -/
 theorem equivPair_eq_of_fstIdx_ne {i} {w : Word M} (h : fstIdx w ≠ some i) :
     equivPair i w = ⟨1, w, h⟩ :=
@@ -551,7 +551,7 @@ instance : MulAction (FreeProduct M) (Word M) :=
 lean 3 declaration is
   forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] [_inst_4 : DecidableEq.{succ u1} ι] (i : ι) (w : FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (m : M i), Eq.{succ (max u1 u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (SMul.smul.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulAction.toHasSmul.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mulAction.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b))) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m) w) (FreeProduct.Word.rcons.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i (FreeProduct.Word.Pair.mk.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i (HMul.hMul.{u2, u2, u2} (M i) (M i) (M i) (instHMul.{u2} (M i) (MulOneClass.toHasMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)))) m (FreeProduct.Word.Pair.head.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i (coeFn.{max 1 (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) => (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) -> (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.equivPair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i) w))) (FreeProduct.Word.Pair.tail.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i (coeFn.{max 1 (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) => (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) -> (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.equivPair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i) w)) (FreeProduct.Word.Pair.fstIdx_ne.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i (coeFn.{max 1 (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) => (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) -> (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.equivPair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i) w))))
 but is expected to have type
-  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u1} (M i)] [_inst_4 : DecidableEq.{succ u2} ι] (i : ι) (w : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (m : M i), Eq.{max (succ u2) (succ u1)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (HSMul.hSMul.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instHSMul.{max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulAction.toSMul.{max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.instMulActionFreeProductWordInstMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b)))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) m) w) (FreeProduct.Word.rcons.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i (let src._@.Mathlib.GroupTheory.FreeProduct._hyg.3964 : (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) w := FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (fun (a : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) a) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.equivPair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i) w; FreeProduct.Word.Pair.mk.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i (HMul.hMul.{u1, u1, u1} (M i) (M i) (M i) (instHMul.{u1} (M i) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)))) m (FreeProduct.Word.Pair.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (fun (a : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) a) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.equivPair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i) w))) (FreeProduct.Word.Pair.tail.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i src._@.Mathlib.GroupTheory.FreeProduct._hyg.3964) (FreeProduct.Word.Pair.fstIdx_ne.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i src._@.Mathlib.GroupTheory.FreeProduct._hyg.3964)))
+  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u1} (M i)] [_inst_4 : DecidableEq.{succ u2} ι] (i : ι) (w : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (m : M i), Eq.{max (succ u2) (succ u1)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (HSMul.hSMul.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instHSMul.{max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulAction.toSMul.{max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.instMulActionFreeProductWordInstMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b)))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) m) w) (FreeProduct.Word.rcons.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i (let src._@.Mathlib.GroupTheory.FreeProduct._hyg.3964 : (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) w := FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (fun (a : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) a) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.equivPair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i) w; FreeProduct.Word.Pair.mk.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i (HMul.hMul.{u1, u1, u1} (M i) (M i) (M i) (instHMul.{u1} (M i) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)))) m (FreeProduct.Word.Pair.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (fun (a : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) a) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.equivPair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i) w))) (FreeProduct.Word.Pair.tail.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i src._@.Mathlib.GroupTheory.FreeProduct._hyg.3964) (FreeProduct.Word.Pair.fstIdx_ne.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i src._@.Mathlib.GroupTheory.FreeProduct._hyg.3964)))
 Case conversion may be inaccurate. Consider using '#align free_product.word.of_smul_def FreeProduct.Word.of_smul_defₓ'. -/
 theorem of_smul_def (i) (w : Word M) (m : M i) :
     of m • w = rcons { equivPair i w with headI := m * (equivPair i w).headI } :=
@@ -562,7 +562,7 @@ theorem of_smul_def (i) (w : Word M) (m : M i) :
 lean 3 declaration is
   forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] [_inst_4 : DecidableEq.{succ u1} ι] {i : ι} {m : M i} {ls : List.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))} {h1 : forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.Mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (List.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (List.hasMem.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)) -> (Ne.{succ u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Sigma.snd.{u1, u2} ι (fun (i : ι) => M i) l) (OfNat.ofNat.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (OfNat.mk.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (One.one.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (MulOneClass.toHasOne.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Monoid.toMulOneClass.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (_inst_1 (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l))))))))} {h2 : List.Chain'.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (fun (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)) (l' : Sigma.{u1, u2} ι (fun (i : ι) => M i)) => Ne.{succ u1} ι (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l) (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l')) (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)}, Eq.{max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mk.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls) h1 h2) (SMul.smul.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i)) (MulAction.toHasSmul.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mulAction.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b))) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m) (_Private.1265251317.mkAux.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2))
 but is expected to have type
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] [_inst_4 : DecidableEq.{succ u1} ι] {i : ι} {m : M i} {ls : List.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i))} {h1 : forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (List.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (List.instMembershipList.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.cons.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)) -> (Ne.{succ u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Sigma.snd.{u1, u2} ι (fun (i : ι) => M i) l) (OfNat.ofNat.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (One.toOfNat1.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Monoid.toOne.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (_inst_1 (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l))))))} {h2 : List.Chain'.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (fun (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)) (l' : Sigma.{u1, u2} ι (fun (i : ι) => M i)) => Ne.{succ u1} ι (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l) (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l')) (List.cons.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)}, Eq.{max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mk.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (List.cons.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls) h1 h2) (HSMul.hSMul.{max u1 u2, max u2 u1, max u1 u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instHSMul.{max u1 u2, max u1 u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (MulAction.toSMul.{max u1 u2, max u1 u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.instMulActionFreeProductWordInstMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, max (succ u2) (succ u1)} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m) (_private.Mathlib.GroupTheory.FreeProduct.0.FreeProduct.Word.mkAux.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2))
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] [_inst_4 : DecidableEq.{succ u1} ι] {i : ι} {m : M i} {ls : List.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i))} {h1 : forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (List.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (List.instMembershipList.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.cons.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)) -> (Ne.{succ u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Sigma.snd.{u1, u2} ι (fun (i : ι) => M i) l) (OfNat.ofNat.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (One.toOfNat1.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Monoid.toOne.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (_inst_1 (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l))))))} {h2 : List.Chain'.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (fun (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)) (l' : Sigma.{u1, u2} ι (fun (i : ι) => M i)) => Ne.{succ u1} ι (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l) (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l')) (List.cons.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)}, Eq.{max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mk.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (List.cons.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls) h1 h2) (HSMul.hSMul.{max u1 u2, max u2 u1, max u1 u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instHSMul.{max u1 u2, max u1 u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (MulAction.toSMul.{max u1 u2, max u1 u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.instMulActionFreeProductWordInstMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, max (succ u2) (succ u1)} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m) (_private.Mathlib.GroupTheory.FreeProduct.0.FreeProduct.Word.mkAux.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2))
 Case conversion may be inaccurate. Consider using '#align free_product.word.cons_eq_smul FreeProduct.Word.cons_eq_smulₓ'. -/
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
 theorem cons_eq_smul {i} {m : M i} {ls h1 h2} :
@@ -574,7 +574,7 @@ theorem cons_eq_smul {i} {m : M i} {ls h1 h2} :
 lean 3 declaration is
   forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] [_inst_4 : DecidableEq.{succ u1} ι] {C : (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) -> Prop}, (C (FreeProduct.Word.empty.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) -> (forall (i : ι) (m : M i) (w : FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)), (C w) -> (C (SMul.smul.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulAction.toHasSmul.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mulAction.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b))) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m) w))) -> (forall (w : FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)), C w)
 but is expected to have type
-  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u1} (M i)] [_inst_4 : DecidableEq.{succ u2} ι] {C : (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) -> Prop}, (C (FreeProduct.Word.empty.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) -> (forall (i : ι) (m : M i) (w : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)), (C w) -> (C (HSMul.hSMul.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instHSMul.{max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulAction.toSMul.{max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.instMulActionFreeProductWordInstMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b)))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) m) w))) -> (forall (w : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)), C w)
+  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u1} (M i)] [_inst_4 : DecidableEq.{succ u2} ι] {C : (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) -> Prop}, (C (FreeProduct.Word.empty.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) -> (forall (i : ι) (m : M i) (w : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)), (C w) -> (C (HSMul.hSMul.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instHSMul.{max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulAction.toSMul.{max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.instMulActionFreeProductWordInstMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b)))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) m) w))) -> (forall (w : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)), C w)
 Case conversion may be inaccurate. Consider using '#align free_product.word.smul_induction FreeProduct.Word.smul_inductionₓ'. -/
 theorem smul_induction {C : Word M → Prop} (h_empty : C empty)
     (h_smul : ∀ (i) (m : M i) (w), C w → C (of m • w)) (w : Word M) : C w :=
@@ -813,7 +813,7 @@ theorem singleton_last {i} (x : M i) (hne_one : x ≠ 1) : (singleton x hne_one)
 lean 3 declaration is
   forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} (x : M i) (hne_one : Ne.{succ u2} (M i) x (OfNat.ofNat.{u2} (M i) 1 (OfNat.mk.{u2} (M i) 1 (One.one.{u2} (M i) (MulOneClass.toHasOne.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))))))), Eq.{succ (max u1 u2)} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.NeWord.prod.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i i (FreeProduct.NeWord.singleton.{u1, u2} ι M (fun {i : ι} => _inst_1 i) i x hne_one)) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) x)
 but is expected to have type
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} (x : M i) (hne_one : Ne.{succ u2} (M i) x (OfNat.ofNat.{u2} (M i) 1 (One.toOfNat1.{u2} (M i) (Monoid.toOne.{u2} (M i) (_inst_1 i))))), Eq.{max (succ u1) (succ u2)} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.NeWord.prod.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i i (FreeProduct.NeWord.singleton.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i x hne_one)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, max (succ u2) (succ u1)} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) x)
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} (x : M i) (hne_one : Ne.{succ u2} (M i) x (OfNat.ofNat.{u2} (M i) 1 (One.toOfNat1.{u2} (M i) (Monoid.toOne.{u2} (M i) (_inst_1 i))))), Eq.{max (succ u1) (succ u2)} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.NeWord.prod.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i i (FreeProduct.NeWord.singleton.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i x hne_one)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, max (succ u2) (succ u1)} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) x)
 Case conversion may be inaccurate. Consider using '#align free_product.neword.prod_singleton FreeProduct.NeWord.prod_singletonₓ'. -/
 @[simp]
 theorem prod_singleton {i} (x : M i) (hne_one : x ≠ 1) : (singleton x hne_one).Prod = of x := by
@@ -913,7 +913,7 @@ theorem mulHead_head {i j : ι} (w : NeWord M i j) (x : M i) (hnotone : x * w.he
 lean 3 declaration is
   forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j) (x : M i) (hnotone : Ne.{succ u2} (M i) (HMul.hMul.{u2, u2, u2} (M i) (M i) (M i) (instHMul.{u2} (M i) (MulOneClass.toHasMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)))) x (FreeProduct.NeWord.head.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w)) (OfNat.ofNat.{u2} (M i) 1 (OfNat.mk.{u2} (M i) 1 (One.one.{u2} (M i) (MulOneClass.toHasOne.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))))))), Eq.{succ (max u1 u2)} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.NeWord.prod.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j (FreeProduct.NeWord.mulHead.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w x hnotone)) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instHMul.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toHasMul.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i))))) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) x) (FreeProduct.NeWord.prod.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w))
 but is expected to have type
-  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j) (x : M i) (hnotone : Ne.{succ u1} (M i) (HMul.hMul.{u1, u1, u1} (M i) (M i) (M i) (instHMul.{u1} (M i) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)))) x (FreeProduct.NeWord.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w)) (OfNat.ofNat.{u1} (M i) 1 (One.toOfNat1.{u1} (M i) (Monoid.toOne.{u1} (M i) (_inst_1 i))))), Eq.{max (succ u2) (succ u1)} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.NeWord.prod.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j (FreeProduct.NeWord.mulHead.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w x hnotone)) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) x) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) x) (instHMul.{max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) x) (MulOneClass.toMul.{max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) x) (Monoid.toMulOneClass.{max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) x) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) x) (FreeProduct.NeWord.prod.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w))
+  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j) (x : M i) (hnotone : Ne.{succ u1} (M i) (HMul.hMul.{u1, u1, u1} (M i) (M i) (M i) (instHMul.{u1} (M i) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)))) x (FreeProduct.NeWord.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w)) (OfNat.ofNat.{u1} (M i) 1 (One.toOfNat1.{u1} (M i) (Monoid.toOne.{u1} (M i) (_inst_1 i))))), Eq.{max (succ u2) (succ u1)} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.NeWord.prod.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j (FreeProduct.NeWord.mulHead.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w x hnotone)) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) x) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) x) (instHMul.{max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) x) (MulOneClass.toMul.{max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) x) (Monoid.toMulOneClass.{max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) x) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) x) (FreeProduct.NeWord.prod.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w))
 Case conversion may be inaccurate. Consider using '#align free_product.neword.mul_head_prod FreeProduct.NeWord.mulHead_prodₓ'. -/
 @[simp]
 theorem mulHead_prod {i j : ι} (w : NeWord M i j) (x : M i) (hnotone : x * w.headI ≠ 1) :
@@ -1011,7 +1011,7 @@ include hpp
 lean 3 declaration is
   forall {ι : Type.{u1}} {G : Type.{u2}} [_inst_3 : Group.{u2} G] {H : ι -> Type.{u3}} [_inst_4 : forall (i : ι), Group.{u3} (H i)] (f : forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) {α : Type.{u4}} [_inst_5 : MulAction.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))] (X : ι -> (Set.{u4} α)), (Pairwise.{u1} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u3} (H i) h (OfNat.ofNat.{u3} (H i) 1 (OfNat.mk.{u3} (H i) 1 (One.one.{u3} (H i) (MulOneClass.toHasOne.{u3} (H i) (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.hasSubset.{u4} α) (SMul.smul.{u2, u4} G (Set.{u4} α) (Set.smulSet.{u2, u4} G α (MulAction.toHasSmul.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)) _inst_5)) (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (H i) -> G) (MonoidHom.hasCoeToFun.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} {j : ι} {k : ι} (w : FreeProduct.NeWord.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j), (Ne.{succ u1} ι j k) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.hasSubset.{u4} α) (SMul.smul.{u2, u4} G (Set.{u4} α) (Set.smulSet.{u2, u4} G α (MulAction.toHasSmul.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)) _inst_5)) (coeFn.{max (succ u2) (succ (max u1 u3)), max (succ (max u1 u3)) (succ u2)} (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) -> G) (MonoidHom.hasCoeToFun.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (coeFn.{max 1 (max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))) (max (succ u2) (succ (max u1 u3))) (succ u1) (succ u2) (succ u3), max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))} (Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (fun (_x : Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) => (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) -> (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (FreeProduct.lift.{u1, u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) f) (FreeProduct.NeWord.prod.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) (X k)) (X i)))
 but is expected to have type
-  forall {ι : Type.{u4}} {G : Type.{u1}} [_inst_3 : Group.{u1} G] {H : ι -> Type.{u3}} [_inst_4 : forall (i : ι), Group.{u3} (H i)] (f : forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) {α : Type.{u2}} [_inst_5 : MulAction.{u1, u2} G α (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))] (X : ι -> (Set.{u2} α)), (Pairwise.{u4} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u3} (H i) h (OfNat.ofNat.{u3} (H i) 1 (One.toOfNat1.{u3} (H i) (InvOneClass.toOne.{u3} (H i) (DivInvOneMonoid.toInvOneClass.{u3} (H i) (DivisionMonoid.toDivInvOneMonoid.{u3} (H i) (Group.toDivisionMonoid.{u3} (H i) (_inst_4 i)))))))) -> (HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) (HSMul.hSMul.{u1, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Set.{u2} α) (Set.{u2} α) (instHSMul.{u1, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Set.{u2} α) (Set.smulSet.{u1, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) α (MulAction.toSMul.{u1, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) α (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) _inst_3)) _inst_5))) (FunLike.coe.{max (succ u1) (succ u3), succ u3, succ u1} (MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) (fun (_x : H i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) _x) (MulHomClass.toFunLike.{max u1 u3, u3, u1} (MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (MulOneClass.toMul.{u3} (H i) (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u3, u3, u1} (MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} {j : ι} {k : ι} (w : FreeProduct.NeWord.{u4, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j), (Ne.{succ u4} ι j k) -> (HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) (HSMul.hSMul.{u1, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u4, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) (Set.{u2} α) (Set.{u2} α) (instHSMul.{u1, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u4, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) (Set.{u2} α) (Set.smulSet.{u1, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u4, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) α (MulAction.toSMul.{u1, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u4, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) α (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u4, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u4, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) _inst_3)) _inst_5))) (FunLike.coe.{max (max (succ u4) (succ u1)) (succ u3), max (succ u4) (succ u3), succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u3 u4, u1} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (fun (_x : FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) => G) _x) (MulHomClass.toFunLike.{max (max u4 u1) u3, max u4 u3, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u3 u4, u1} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (MulOneClass.toMul.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max (max u4 u1) u3, max u4 u3, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u3 u4, u1} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{max u4 u3, u1} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (FunLike.coe.{max (max (succ u1) (succ u3)) (succ u4), max (max (succ u1) (succ u3)) (succ u4), max (max (succ u1) (succ u3)) (succ u4)} (Equiv.{max (max (succ u4) (succ u3)) (succ u1), max (succ u1) (succ (max u3 u4))} (forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u3 u4, u1} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (fun (_x : forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u3 u4, u1} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) _x) (Equiv.instFunLikeEquiv.{max (max (succ u1) (succ u3)) (succ u4), max (max (succ u1) (succ u3)) (succ u4)} (forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u3 u4, u1} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (FreeProduct.lift.{u4, u3, u1} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) f) (FreeProduct.NeWord.prod.{u4, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) (X k)) (X i)))
+  forall {ι : Type.{u4}} {G : Type.{u1}} [_inst_3 : Group.{u1} G] {H : ι -> Type.{u3}} [_inst_4 : forall (i : ι), Group.{u3} (H i)] (f : forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) {α : Type.{u2}} [_inst_5 : MulAction.{u1, u2} G α (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))] (X : ι -> (Set.{u2} α)), (Pairwise.{u4} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u3} (H i) h (OfNat.ofNat.{u3} (H i) 1 (One.toOfNat1.{u3} (H i) (InvOneClass.toOne.{u3} (H i) (DivInvOneMonoid.toInvOneClass.{u3} (H i) (DivisionMonoid.toDivInvOneMonoid.{u3} (H i) (Group.toDivisionMonoid.{u3} (H i) (_inst_4 i)))))))) -> (HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) (HSMul.hSMul.{u1, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Set.{u2} α) (Set.{u2} α) (instHSMul.{u1, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Set.{u2} α) (Set.smulSet.{u1, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) α (MulAction.toSMul.{u1, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) α (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) _inst_3)) _inst_5))) (FunLike.coe.{max (succ u1) (succ u3), succ u3, succ u1} (MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) (fun (_x : H i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) _x) (MulHomClass.toFunLike.{max u1 u3, u3, u1} (MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (MulOneClass.toMul.{u3} (H i) (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u3, u3, u1} (MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} {j : ι} {k : ι} (w : FreeProduct.NeWord.{u4, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j), (Ne.{succ u4} ι j k) -> (HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) (HSMul.hSMul.{u1, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u4, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) (Set.{u2} α) (Set.{u2} α) (instHSMul.{u1, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u4, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) (Set.{u2} α) (Set.smulSet.{u1, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u4, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) α (MulAction.toSMul.{u1, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u4, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) α (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u4, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u4, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) _inst_3)) _inst_5))) (FunLike.coe.{max (max (succ u4) (succ u1)) (succ u3), max (succ u4) (succ u3), succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u3 u4, u1} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (fun (_x : FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) => G) _x) (MulHomClass.toFunLike.{max (max u4 u1) u3, max u4 u3, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u3 u4, u1} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (MulOneClass.toMul.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max (max u4 u1) u3, max u4 u3, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u3 u4, u1} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{max u4 u3, u1} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (FunLike.coe.{max (max (succ u1) (succ u3)) (succ u4), max (max (succ u1) (succ u3)) (succ u4), max (max (succ u1) (succ u3)) (succ u4)} (Equiv.{max (max (succ u4) (succ u3)) (succ u1), max (succ u1) (succ (max u3 u4))} (forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u3 u4, u1} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (fun (_x : forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u3 u4, u1} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) _x) (Equiv.instFunLikeEquiv.{max (max (succ u1) (succ u3)) (succ u4), max (max (succ u1) (succ u3)) (succ u4)} (forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u3 u4, u1} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (FreeProduct.lift.{u4, u3, u1} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) f) (FreeProduct.NeWord.prod.{u4, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) (X k)) (X i)))
 Case conversion may be inaccurate. Consider using '#align free_product.lift_word_ping_pong FreeProduct.lift_word_ping_pongₓ'. -/
 theorem lift_word_ping_pong {i j k} (w : NeWord H i j) (hk : j ≠ k) : lift f w.Prod • X k ⊆ X i :=
   by
@@ -1033,7 +1033,7 @@ include X hXnonempty hXdisj
 lean 3 declaration is
   forall {ι : Type.{u1}} {G : Type.{u2}} [_inst_3 : Group.{u2} G] {H : ι -> Type.{u3}} [_inst_4 : forall (i : ι), Group.{u3} (H i)] (f : forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) {α : Type.{u4}} [_inst_5 : MulAction.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.completeBooleanAlgebra.{u4} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u4} (Set.{u4} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u4} (Set.{u4} α) (Set.booleanAlgebra.{u4} α))) (X i) (X j))) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u3} (H i) h (OfNat.ofNat.{u3} (H i) 1 (OfNat.mk.{u3} (H i) 1 (One.one.{u3} (H i) (MulOneClass.toHasOne.{u3} (H i) (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.hasSubset.{u4} α) (SMul.smul.{u2, u4} G (Set.{u4} α) (Set.smulSet.{u2, u4} G α (MulAction.toHasSmul.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)) _inst_5)) (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (H i) -> G) (MonoidHom.hasCoeToFun.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} {j : ι} {k : ι} (w : FreeProduct.NeWord.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j), (Ne.{succ u1} ι k i) -> (Ne.{succ u1} ι k j) -> (Ne.{succ u2} G (coeFn.{max (succ u2) (succ (max u1 u3)), max (succ (max u1 u3)) (succ u2)} (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) -> G) (MonoidHom.hasCoeToFun.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (coeFn.{max 1 (max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))) (max (succ u2) (succ (max u1 u3))) (succ u1) (succ u2) (succ u3), max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))} (Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (fun (_x : Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) => (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) -> (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (FreeProduct.lift.{u1, u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) f) (FreeProduct.NeWord.prod.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) (OfNat.ofNat.{u2} G 1 (OfNat.mk.{u2} G 1 (One.one.{u2} G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))))))))
 but is expected to have type
-  forall {ι : Type.{u3}} {G : Type.{u1}} [_inst_3 : Group.{u1} G] {H : ι -> Type.{u2}} [_inst_4 : forall (i : ι), Group.{u2} (H i)] (f : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) {α : Type.{u4}} [_inst_5 : MulAction.{u1, u4} G α (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (BoundedOrder.toOrderBot.{u4} (Set.{u4} α) (Preorder.toLE.{u4} (Set.{u4} α) (PartialOrder.toPreorder.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))))) (CompleteLattice.toBoundedOrder.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (X i) (X j))) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u2} (H i) h (OfNat.ofNat.{u2} (H i) 1 (One.toOfNat1.{u2} (H i) (InvOneClass.toOne.{u2} (H i) (DivInvOneMonoid.toInvOneClass.{u2} (H i) (DivisionMonoid.toDivInvOneMonoid.{u2} (H i) (Group.toDivisionMonoid.{u2} (H i) (_inst_4 i)))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.instHasSubsetSet.{u4} α) (HSMul.hSMul.{u1, u4, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Set.{u4} α) (Set.{u4} α) (instHSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Set.{u4} α) (Set.smulSet.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) α (MulAction.toSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) α (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) _inst_3)) _inst_5))) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) (fun (_x : H i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) _x) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (MulOneClass.toMul.{u2} (H i) (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} {j : ι} {k : ι} (w : FreeProduct.NeWord.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j), (Ne.{succ u3} ι k i) -> (Ne.{succ u3} ι k j) -> (Ne.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (FunLike.coe.{max (max (succ u3) (succ u1)) (succ u2), max (succ u3) (succ u2), succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (fun (_x : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) _x) (MulHomClass.toFunLike.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (MulOneClass.toMul.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{max u3 u2, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (Equiv.{max (max (succ u3) (succ u2)) (succ u1), max (succ u1) (succ (max u2 u3))} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (fun (_x : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) _x) (Equiv.instFunLikeEquiv.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (FreeProduct.lift.{u3, u2, u1} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) f) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (InvOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (Group.toDivisionMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) _inst_3))))))))
+  forall {ι : Type.{u3}} {G : Type.{u1}} [_inst_3 : Group.{u1} G] {H : ι -> Type.{u2}} [_inst_4 : forall (i : ι), Group.{u2} (H i)] (f : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) {α : Type.{u4}} [_inst_5 : MulAction.{u1, u4} G α (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (BoundedOrder.toOrderBot.{u4} (Set.{u4} α) (Preorder.toLE.{u4} (Set.{u4} α) (PartialOrder.toPreorder.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))))) (CompleteLattice.toBoundedOrder.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (X i) (X j))) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u2} (H i) h (OfNat.ofNat.{u2} (H i) 1 (One.toOfNat1.{u2} (H i) (InvOneClass.toOne.{u2} (H i) (DivInvOneMonoid.toInvOneClass.{u2} (H i) (DivisionMonoid.toDivInvOneMonoid.{u2} (H i) (Group.toDivisionMonoid.{u2} (H i) (_inst_4 i)))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.instHasSubsetSet.{u4} α) (HSMul.hSMul.{u1, u4, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Set.{u4} α) (Set.{u4} α) (instHSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Set.{u4} α) (Set.smulSet.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) α (MulAction.toSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) α (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) _inst_3)) _inst_5))) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) (fun (_x : H i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) _x) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (MulOneClass.toMul.{u2} (H i) (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} {j : ι} {k : ι} (w : FreeProduct.NeWord.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j), (Ne.{succ u3} ι k i) -> (Ne.{succ u3} ι k j) -> (Ne.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (FunLike.coe.{max (max (succ u3) (succ u1)) (succ u2), max (succ u3) (succ u2), succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (fun (_x : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) _x) (MulHomClass.toFunLike.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (MulOneClass.toMul.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{max u3 u2, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (Equiv.{max (max (succ u3) (succ u2)) (succ u1), max (succ u1) (succ (max u2 u3))} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (fun (_x : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) _x) (Equiv.instFunLikeEquiv.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (FreeProduct.lift.{u3, u2, u1} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) f) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (InvOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (Group.toDivisionMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) _inst_3))))))))
 Case conversion may be inaccurate. Consider using '#align free_product.lift_word_prod_nontrivial_of_other_i FreeProduct.lift_word_prod_nontrivial_of_other_iₓ'. -/
 theorem lift_word_prod_nontrivial_of_other_i {i j k} (w : NeWord H i j) (hhead : k ≠ i)
     (hlast : k ≠ j) : lift f w.Prod ≠ 1 := by
@@ -1049,7 +1049,7 @@ include hnontriv
 lean 3 declaration is
   forall {ι : Type.{u1}} [hnontriv : Nontrivial.{u1} ι] {G : Type.{u2}} [_inst_3 : Group.{u2} G] {H : ι -> Type.{u3}} [_inst_4 : forall (i : ι), Group.{u3} (H i)] (f : forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) {α : Type.{u4}} [_inst_5 : MulAction.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.completeBooleanAlgebra.{u4} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u4} (Set.{u4} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u4} (Set.{u4} α) (Set.booleanAlgebra.{u4} α))) (X i) (X j))) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u3} (H i) h (OfNat.ofNat.{u3} (H i) 1 (OfNat.mk.{u3} (H i) 1 (One.one.{u3} (H i) (MulOneClass.toHasOne.{u3} (H i) (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.hasSubset.{u4} α) (SMul.smul.{u2, u4} G (Set.{u4} α) (Set.smulSet.{u2, u4} G α (MulAction.toHasSmul.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)) _inst_5)) (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (H i) -> G) (MonoidHom.hasCoeToFun.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} (w : FreeProduct.NeWord.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i i), Ne.{succ u2} G (coeFn.{max (succ u2) (succ (max u1 u3)), max (succ (max u1 u3)) (succ u2)} (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) -> G) (MonoidHom.hasCoeToFun.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (coeFn.{max 1 (max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))) (max (succ u2) (succ (max u1 u3))) (succ u1) (succ u2) (succ u3), max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))} (Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (fun (_x : Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) => (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) -> (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (FreeProduct.lift.{u1, u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) f) (FreeProduct.NeWord.prod.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i i w)) (OfNat.ofNat.{u2} G 1 (OfNat.mk.{u2} G 1 (One.one.{u2} G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))))))
 but is expected to have type
-  forall {ι : Type.{u3}} [hnontriv : Nontrivial.{u3} ι] {G : Type.{u1}} [_inst_3 : Group.{u1} G] {H : ι -> Type.{u2}} [_inst_4 : forall (i : ι), Group.{u2} (H i)] (f : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) {α : Type.{u4}} [_inst_5 : MulAction.{u1, u4} G α (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (BoundedOrder.toOrderBot.{u4} (Set.{u4} α) (Preorder.toLE.{u4} (Set.{u4} α) (PartialOrder.toPreorder.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))))) (CompleteLattice.toBoundedOrder.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (X i) (X j))) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u2} (H i) h (OfNat.ofNat.{u2} (H i) 1 (One.toOfNat1.{u2} (H i) (InvOneClass.toOne.{u2} (H i) (DivInvOneMonoid.toInvOneClass.{u2} (H i) (DivisionMonoid.toDivInvOneMonoid.{u2} (H i) (Group.toDivisionMonoid.{u2} (H i) (_inst_4 i)))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.instHasSubsetSet.{u4} α) (HSMul.hSMul.{u1, u4, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Set.{u4} α) (Set.{u4} α) (instHSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Set.{u4} α) (Set.smulSet.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) α (MulAction.toSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) α (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) _inst_3)) _inst_5))) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) (fun (_x : H i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) _x) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (MulOneClass.toMul.{u2} (H i) (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} (w : FreeProduct.NeWord.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i), Ne.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i w)) (FunLike.coe.{max (max (succ u3) (succ u1)) (succ u2), max (succ u3) (succ u2), succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (fun (_x : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) _x) (MulHomClass.toFunLike.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (MulOneClass.toMul.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{max u3 u2, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (Equiv.{max (max (succ u3) (succ u2)) (succ u1), max (succ u1) (succ (max u2 u3))} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (fun (_x : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) _x) (Equiv.instFunLikeEquiv.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (FreeProduct.lift.{u3, u2, u1} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) f) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i w)) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i w)) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i w)) (InvOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i w)) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i w)) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i w)) (Group.toDivisionMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i w)) _inst_3)))))))
+  forall {ι : Type.{u3}} [hnontriv : Nontrivial.{u3} ι] {G : Type.{u1}} [_inst_3 : Group.{u1} G] {H : ι -> Type.{u2}} [_inst_4 : forall (i : ι), Group.{u2} (H i)] (f : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) {α : Type.{u4}} [_inst_5 : MulAction.{u1, u4} G α (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (BoundedOrder.toOrderBot.{u4} (Set.{u4} α) (Preorder.toLE.{u4} (Set.{u4} α) (PartialOrder.toPreorder.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))))) (CompleteLattice.toBoundedOrder.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (X i) (X j))) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u2} (H i) h (OfNat.ofNat.{u2} (H i) 1 (One.toOfNat1.{u2} (H i) (InvOneClass.toOne.{u2} (H i) (DivInvOneMonoid.toInvOneClass.{u2} (H i) (DivisionMonoid.toDivInvOneMonoid.{u2} (H i) (Group.toDivisionMonoid.{u2} (H i) (_inst_4 i)))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.instHasSubsetSet.{u4} α) (HSMul.hSMul.{u1, u4, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Set.{u4} α) (Set.{u4} α) (instHSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Set.{u4} α) (Set.smulSet.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) α (MulAction.toSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) α (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) _inst_3)) _inst_5))) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) (fun (_x : H i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) _x) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (MulOneClass.toMul.{u2} (H i) (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} (w : FreeProduct.NeWord.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i), Ne.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i w)) (FunLike.coe.{max (max (succ u3) (succ u1)) (succ u2), max (succ u3) (succ u2), succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (fun (_x : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) _x) (MulHomClass.toFunLike.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (MulOneClass.toMul.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{max u3 u2, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (Equiv.{max (max (succ u3) (succ u2)) (succ u1), max (succ u1) (succ (max u2 u3))} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (fun (_x : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) _x) (Equiv.instFunLikeEquiv.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (FreeProduct.lift.{u3, u2, u1} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) f) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i w)) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i w)) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i w)) (InvOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i w)) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i w)) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i w)) (Group.toDivisionMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i w)) _inst_3)))))))
 Case conversion may be inaccurate. Consider using '#align free_product.lift_word_prod_nontrivial_of_head_eq_last FreeProduct.lift_word_prod_nontrivial_of_head_eq_lastₓ'. -/
 theorem lift_word_prod_nontrivial_of_head_eq_last {i} (w : NeWord H i i) : lift f w.Prod ≠ 1 :=
   by
@@ -1061,7 +1061,7 @@ theorem lift_word_prod_nontrivial_of_head_eq_last {i} (w : NeWord H i i) : lift
 lean 3 declaration is
   forall {ι : Type.{u1}} [hnontriv : Nontrivial.{u1} ι] {G : Type.{u2}} [_inst_3 : Group.{u2} G] {H : ι -> Type.{u3}} [_inst_4 : forall (i : ι), Group.{u3} (H i)] (f : forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) {α : Type.{u4}} [_inst_5 : MulAction.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.completeBooleanAlgebra.{u4} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u4} (Set.{u4} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u4} (Set.{u4} α) (Set.booleanAlgebra.{u4} α))) (X i) (X j))) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u3} (H i) h (OfNat.ofNat.{u3} (H i) 1 (OfNat.mk.{u3} (H i) 1 (One.one.{u3} (H i) (MulOneClass.toHasOne.{u3} (H i) (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.hasSubset.{u4} α) (SMul.smul.{u2, u4} G (Set.{u4} α) (Set.smulSet.{u2, u4} G α (MulAction.toHasSmul.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)) _inst_5)) (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (H i) -> G) (MonoidHom.hasCoeToFun.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} {j : ι} (w : FreeProduct.NeWord.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j), (LE.le.{succ u3} Cardinal.{u3} Cardinal.hasLe.{u3} (OfNat.ofNat.{succ u3} Cardinal.{u3} 3 (OfNat.mk.{succ u3} Cardinal.{u3} 3 (bit1.{succ u3} Cardinal.{u3} Cardinal.hasOne.{u3} Cardinal.hasAdd.{u3} (One.one.{succ u3} Cardinal.{u3} Cardinal.hasOne.{u3})))) (Cardinal.mk.{u3} (H i))) -> (Ne.{succ u1} ι i j) -> (Ne.{succ u2} G (coeFn.{max (succ u2) (succ (max u1 u3)), max (succ (max u1 u3)) (succ u2)} (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) -> G) (MonoidHom.hasCoeToFun.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (coeFn.{max 1 (max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))) (max (succ u2) (succ (max u1 u3))) (succ u1) (succ u2) (succ u3), max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))} (Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (fun (_x : Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) => (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) -> (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (FreeProduct.lift.{u1, u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) f) (FreeProduct.NeWord.prod.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) (OfNat.ofNat.{u2} G 1 (OfNat.mk.{u2} G 1 (One.one.{u2} G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))))))))
 but is expected to have type
-  forall {ι : Type.{u3}} [hnontriv : Nontrivial.{u3} ι] {G : Type.{u1}} [_inst_3 : Group.{u1} G] {H : ι -> Type.{u2}} [_inst_4 : forall (i : ι), Group.{u2} (H i)] (f : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) {α : Type.{u4}} [_inst_5 : MulAction.{u1, u4} G α (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (BoundedOrder.toOrderBot.{u4} (Set.{u4} α) (Preorder.toLE.{u4} (Set.{u4} α) (PartialOrder.toPreorder.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))))) (CompleteLattice.toBoundedOrder.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (X i) (X j))) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u2} (H i) h (OfNat.ofNat.{u2} (H i) 1 (One.toOfNat1.{u2} (H i) (InvOneClass.toOne.{u2} (H i) (DivInvOneMonoid.toInvOneClass.{u2} (H i) (DivisionMonoid.toDivInvOneMonoid.{u2} (H i) (Group.toDivisionMonoid.{u2} (H i) (_inst_4 i)))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.instHasSubsetSet.{u4} α) (HSMul.hSMul.{u1, u4, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Set.{u4} α) (Set.{u4} α) (instHSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Set.{u4} α) (Set.smulSet.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) α (MulAction.toSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) α (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) _inst_3)) _inst_5))) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) (fun (_x : H i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) _x) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (MulOneClass.toMul.{u2} (H i) (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} {j : ι} (w : FreeProduct.NeWord.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j), (LE.le.{succ u2} Cardinal.{u2} Cardinal.instLECardinal.{u2} (OfNat.ofNat.{succ u2} Cardinal.{u2} 3 (instOfNat.{succ u2} Cardinal.{u2} 3 Cardinal.instNatCastCardinal.{u2} (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))) (Cardinal.mk.{u2} (H i))) -> (Ne.{succ u3} ι i j) -> (Ne.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (FunLike.coe.{max (max (succ u3) (succ u1)) (succ u2), max (succ u3) (succ u2), succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (fun (_x : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) _x) (MulHomClass.toFunLike.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (MulOneClass.toMul.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{max u3 u2, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (Equiv.{max (max (succ u3) (succ u2)) (succ u1), max (succ u1) (succ (max u2 u3))} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (fun (_x : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) _x) (Equiv.instFunLikeEquiv.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (FreeProduct.lift.{u3, u2, u1} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) f) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (InvOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (Group.toDivisionMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) _inst_3))))))))
+  forall {ι : Type.{u3}} [hnontriv : Nontrivial.{u3} ι] {G : Type.{u1}} [_inst_3 : Group.{u1} G] {H : ι -> Type.{u2}} [_inst_4 : forall (i : ι), Group.{u2} (H i)] (f : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) {α : Type.{u4}} [_inst_5 : MulAction.{u1, u4} G α (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (BoundedOrder.toOrderBot.{u4} (Set.{u4} α) (Preorder.toLE.{u4} (Set.{u4} α) (PartialOrder.toPreorder.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))))) (CompleteLattice.toBoundedOrder.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (X i) (X j))) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u2} (H i) h (OfNat.ofNat.{u2} (H i) 1 (One.toOfNat1.{u2} (H i) (InvOneClass.toOne.{u2} (H i) (DivInvOneMonoid.toInvOneClass.{u2} (H i) (DivisionMonoid.toDivInvOneMonoid.{u2} (H i) (Group.toDivisionMonoid.{u2} (H i) (_inst_4 i)))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.instHasSubsetSet.{u4} α) (HSMul.hSMul.{u1, u4, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Set.{u4} α) (Set.{u4} α) (instHSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Set.{u4} α) (Set.smulSet.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) α (MulAction.toSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) α (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) _inst_3)) _inst_5))) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) (fun (_x : H i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) _x) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (MulOneClass.toMul.{u2} (H i) (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} {j : ι} (w : FreeProduct.NeWord.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j), (LE.le.{succ u2} Cardinal.{u2} Cardinal.instLECardinal.{u2} (OfNat.ofNat.{succ u2} Cardinal.{u2} 3 (instOfNat.{succ u2} Cardinal.{u2} 3 Cardinal.instNatCastCardinal.{u2} (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))) (Cardinal.mk.{u2} (H i))) -> (Ne.{succ u3} ι i j) -> (Ne.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (FunLike.coe.{max (max (succ u3) (succ u1)) (succ u2), max (succ u3) (succ u2), succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (fun (_x : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) _x) (MulHomClass.toFunLike.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (MulOneClass.toMul.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{max u3 u2, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (Equiv.{max (max (succ u3) (succ u2)) (succ u1), max (succ u1) (succ (max u2 u3))} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (fun (_x : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) _x) (Equiv.instFunLikeEquiv.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (FreeProduct.lift.{u3, u2, u1} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) f) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (InvOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (Group.toDivisionMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) _inst_3))))))))
 Case conversion may be inaccurate. Consider using '#align free_product.lift_word_prod_nontrivial_of_head_card FreeProduct.lift_word_prod_nontrivial_of_head_cardₓ'. -/
 theorem lift_word_prod_nontrivial_of_head_card {i j} (w : NeWord H i j) (hcard : 3 ≤ (#H i))
     (hheadtail : i ≠ j) : lift f w.Prod ≠ 1 :=
@@ -1086,7 +1086,7 @@ include hcard
 lean 3 declaration is
   forall {ι : Type.{u1}} [hnontriv : Nontrivial.{u1} ι] {G : Type.{u2}} [_inst_3 : Group.{u2} G] {H : ι -> Type.{u3}} [_inst_4 : forall (i : ι), Group.{u3} (H i)] (f : forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))), (Or (LE.le.{succ u1} Cardinal.{u1} Cardinal.hasLe.{u1} (OfNat.ofNat.{succ u1} Cardinal.{u1} 3 (OfNat.mk.{succ u1} Cardinal.{u1} 3 (bit1.{succ u1} Cardinal.{u1} Cardinal.hasOne.{u1} Cardinal.hasAdd.{u1} (One.one.{succ u1} Cardinal.{u1} Cardinal.hasOne.{u1})))) (Cardinal.mk.{u1} ι)) (Exists.{succ u1} ι (fun (i : ι) => LE.le.{succ u3} Cardinal.{u3} Cardinal.hasLe.{u3} (OfNat.ofNat.{succ u3} Cardinal.{u3} 3 (OfNat.mk.{succ u3} Cardinal.{u3} 3 (bit1.{succ u3} Cardinal.{u3} Cardinal.hasOne.{u3} Cardinal.hasAdd.{u3} (One.one.{succ u3} Cardinal.{u3} Cardinal.hasOne.{u3})))) (Cardinal.mk.{u3} (H i))))) -> (forall {α : Type.{u4}} [_inst_5 : MulAction.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.completeBooleanAlgebra.{u4} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u4} (Set.{u4} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u4} (Set.{u4} α) (Set.booleanAlgebra.{u4} α))) (X i) (X j))) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u3} (H i) h (OfNat.ofNat.{u3} (H i) 1 (OfNat.mk.{u3} (H i) 1 (One.one.{u3} (H i) (MulOneClass.toHasOne.{u3} (H i) (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.hasSubset.{u4} α) (SMul.smul.{u2, u4} G (Set.{u4} α) (Set.smulSet.{u2, u4} G α (MulAction.toHasSmul.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)) _inst_5)) (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (H i) -> G) (MonoidHom.hasCoeToFun.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} {j : ι} (w : FreeProduct.NeWord.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j), Ne.{succ u2} G (coeFn.{max (succ u2) (succ (max u1 u3)), max (succ (max u1 u3)) (succ u2)} (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) -> G) (MonoidHom.hasCoeToFun.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (coeFn.{max 1 (max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))) (max (succ u2) (succ (max u1 u3))) (succ u1) (succ u2) (succ u3), max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))} (Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (fun (_x : Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) => (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) -> (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (FreeProduct.lift.{u1, u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) f) (FreeProduct.NeWord.prod.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) (OfNat.ofNat.{u2} G 1 (OfNat.mk.{u2} G 1 (One.one.{u2} G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))))))))
 but is expected to have type
-  forall {ι : Type.{u3}} [hnontriv : Nontrivial.{u3} ι] {G : Type.{u1}} [_inst_3 : Group.{u1} G] {H : ι -> Type.{u2}} [_inst_4 : forall (i : ι), Group.{u2} (H i)] (f : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))), (Or (LE.le.{succ u3} Cardinal.{u3} Cardinal.instLECardinal.{u3} (OfNat.ofNat.{succ u3} Cardinal.{u3} 3 (instOfNat.{succ u3} Cardinal.{u3} 3 Cardinal.instNatCastCardinal.{u3} (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))) (Cardinal.mk.{u3} ι)) (Exists.{succ u3} ι (fun (i : ι) => LE.le.{succ u2} Cardinal.{u2} Cardinal.instLECardinal.{u2} (OfNat.ofNat.{succ u2} Cardinal.{u2} 3 (instOfNat.{succ u2} Cardinal.{u2} 3 Cardinal.instNatCastCardinal.{u2} (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))) (Cardinal.mk.{u2} (H i))))) -> (forall {α : Type.{u4}} [_inst_5 : MulAction.{u1, u4} G α (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (BoundedOrder.toOrderBot.{u4} (Set.{u4} α) (Preorder.toLE.{u4} (Set.{u4} α) (PartialOrder.toPreorder.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))))) (CompleteLattice.toBoundedOrder.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (X i) (X j))) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u2} (H i) h (OfNat.ofNat.{u2} (H i) 1 (One.toOfNat1.{u2} (H i) (InvOneClass.toOne.{u2} (H i) (DivInvOneMonoid.toInvOneClass.{u2} (H i) (DivisionMonoid.toDivInvOneMonoid.{u2} (H i) (Group.toDivisionMonoid.{u2} (H i) (_inst_4 i)))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.instHasSubsetSet.{u4} α) (HSMul.hSMul.{u1, u4, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Set.{u4} α) (Set.{u4} α) (instHSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Set.{u4} α) (Set.smulSet.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) α (MulAction.toSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) α (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) _inst_3)) _inst_5))) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) (fun (_x : H i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) _x) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (MulOneClass.toMul.{u2} (H i) (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} {j : ι} (w : FreeProduct.NeWord.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j), Ne.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (FunLike.coe.{max (max (succ u3) (succ u1)) (succ u2), max (succ u3) (succ u2), succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (fun (_x : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) _x) (MulHomClass.toFunLike.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (MulOneClass.toMul.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{max u3 u2, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (Equiv.{max (max (succ u3) (succ u2)) (succ u1), max (succ u1) (succ (max u2 u3))} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (fun (_x : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) _x) (Equiv.instFunLikeEquiv.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (FreeProduct.lift.{u3, u2, u1} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) f) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (InvOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (Group.toDivisionMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) _inst_3))))))))
+  forall {ι : Type.{u3}} [hnontriv : Nontrivial.{u3} ι] {G : Type.{u1}} [_inst_3 : Group.{u1} G] {H : ι -> Type.{u2}} [_inst_4 : forall (i : ι), Group.{u2} (H i)] (f : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))), (Or (LE.le.{succ u3} Cardinal.{u3} Cardinal.instLECardinal.{u3} (OfNat.ofNat.{succ u3} Cardinal.{u3} 3 (instOfNat.{succ u3} Cardinal.{u3} 3 Cardinal.instNatCastCardinal.{u3} (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))) (Cardinal.mk.{u3} ι)) (Exists.{succ u3} ι (fun (i : ι) => LE.le.{succ u2} Cardinal.{u2} Cardinal.instLECardinal.{u2} (OfNat.ofNat.{succ u2} Cardinal.{u2} 3 (instOfNat.{succ u2} Cardinal.{u2} 3 Cardinal.instNatCastCardinal.{u2} (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))) (Cardinal.mk.{u2} (H i))))) -> (forall {α : Type.{u4}} [_inst_5 : MulAction.{u1, u4} G α (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (BoundedOrder.toOrderBot.{u4} (Set.{u4} α) (Preorder.toLE.{u4} (Set.{u4} α) (PartialOrder.toPreorder.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))))) (CompleteLattice.toBoundedOrder.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (X i) (X j))) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u2} (H i) h (OfNat.ofNat.{u2} (H i) 1 (One.toOfNat1.{u2} (H i) (InvOneClass.toOne.{u2} (H i) (DivInvOneMonoid.toInvOneClass.{u2} (H i) (DivisionMonoid.toDivInvOneMonoid.{u2} (H i) (Group.toDivisionMonoid.{u2} (H i) (_inst_4 i)))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.instHasSubsetSet.{u4} α) (HSMul.hSMul.{u1, u4, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Set.{u4} α) (Set.{u4} α) (instHSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Set.{u4} α) (Set.smulSet.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) α (MulAction.toSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) α (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) _inst_3)) _inst_5))) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) (fun (_x : H i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) _x) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (MulOneClass.toMul.{u2} (H i) (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} {j : ι} (w : FreeProduct.NeWord.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j), Ne.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (FunLike.coe.{max (max (succ u3) (succ u1)) (succ u2), max (succ u3) (succ u2), succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (fun (_x : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) _x) (MulHomClass.toFunLike.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (MulOneClass.toMul.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{max u3 u2, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (Equiv.{max (max (succ u3) (succ u2)) (succ u1), max (succ u1) (succ (max u2 u3))} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (fun (_x : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) _x) (Equiv.instFunLikeEquiv.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (FreeProduct.lift.{u3, u2, u1} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) f) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (InvOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (Group.toDivisionMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) _inst_3))))))))
 Case conversion may be inaccurate. Consider using '#align free_product.lift_word_prod_nontrivial_of_not_empty FreeProduct.lift_word_prod_nontrivial_of_not_emptyₓ'. -/
 theorem lift_word_prod_nontrivial_of_not_empty {i j} (w : NeWord H i j) : lift f w.Prod ≠ 1 := by
   classical
@@ -1125,7 +1125,7 @@ theorem lift_word_prod_nontrivial_of_not_empty {i j} (w : NeWord H i j) : lift f
 lean 3 declaration is
   forall {ι : Type.{u1}} [hnontriv : Nontrivial.{u1} ι] {G : Type.{u2}} [_inst_3 : Group.{u2} G] {H : ι -> Type.{u3}} [_inst_4 : forall (i : ι), Group.{u3} (H i)] (f : forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))), (Or (LE.le.{succ u1} Cardinal.{u1} Cardinal.hasLe.{u1} (OfNat.ofNat.{succ u1} Cardinal.{u1} 3 (OfNat.mk.{succ u1} Cardinal.{u1} 3 (bit1.{succ u1} Cardinal.{u1} Cardinal.hasOne.{u1} Cardinal.hasAdd.{u1} (One.one.{succ u1} Cardinal.{u1} Cardinal.hasOne.{u1})))) (Cardinal.mk.{u1} ι)) (Exists.{succ u1} ι (fun (i : ι) => LE.le.{succ u3} Cardinal.{u3} Cardinal.hasLe.{u3} (OfNat.ofNat.{succ u3} Cardinal.{u3} 3 (OfNat.mk.{succ u3} Cardinal.{u3} 3 (bit1.{succ u3} Cardinal.{u3} Cardinal.hasOne.{u3} Cardinal.hasAdd.{u3} (One.one.{succ u3} Cardinal.{u3} Cardinal.hasOne.{u3})))) (Cardinal.mk.{u3} (H i))))) -> (forall {α : Type.{u4}} [_inst_5 : MulAction.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.completeBooleanAlgebra.{u4} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u4} (Set.{u4} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u4} (Set.{u4} α) (Set.booleanAlgebra.{u4} α))) (X i) (X j))) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u3} (H i) h (OfNat.ofNat.{u3} (H i) 1 (OfNat.mk.{u3} (H i) 1 (One.one.{u3} (H i) (MulOneClass.toHasOne.{u3} (H i) (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.hasSubset.{u4} α) (SMul.smul.{u2, u4} G (Set.{u4} α) (Set.smulSet.{u2, u4} G α (MulAction.toHasSmul.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)) _inst_5)) (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (H i) -> G) (MonoidHom.hasCoeToFun.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (f i) h) (X j)) (X i)))) -> (forall {w : FreeProduct.Word.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))}, (Eq.{succ u2} G (coeFn.{max (succ u2) (succ (max u1 u3)), max (succ (max u1 u3)) (succ u2)} (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) -> G) (MonoidHom.hasCoeToFun.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (coeFn.{max 1 (max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))) (max (succ u2) (succ (max u1 u3))) (succ u1) (succ u2) (succ u3), max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))} (Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (fun (_x : Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) => (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) -> (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (FreeProduct.lift.{u1, u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) f) (FreeProduct.Word.prod.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) w)) (OfNat.ofNat.{u2} G 1 (OfNat.mk.{u2} G 1 (One.one.{u2} G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))))))) -> (Eq.{max (succ u1) (succ u3)} (FreeProduct.Word.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) w (FreeProduct.Word.empty.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))))))
 but is expected to have type
-  forall {ι : Type.{u3}} [hnontriv : Nontrivial.{u3} ι] {G : Type.{u1}} [_inst_3 : Group.{u1} G] {H : ι -> Type.{u2}} [_inst_4 : forall (i : ι), Group.{u2} (H i)] (f : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))), (Or (LE.le.{succ u3} Cardinal.{u3} Cardinal.instLECardinal.{u3} (OfNat.ofNat.{succ u3} Cardinal.{u3} 3 (instOfNat.{succ u3} Cardinal.{u3} 3 Cardinal.instNatCastCardinal.{u3} (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))) (Cardinal.mk.{u3} ι)) (Exists.{succ u3} ι (fun (i : ι) => LE.le.{succ u2} Cardinal.{u2} Cardinal.instLECardinal.{u2} (OfNat.ofNat.{succ u2} Cardinal.{u2} 3 (instOfNat.{succ u2} Cardinal.{u2} 3 Cardinal.instNatCastCardinal.{u2} (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))) (Cardinal.mk.{u2} (H i))))) -> (forall {α : Type.{u4}} [_inst_5 : MulAction.{u1, u4} G α (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (BoundedOrder.toOrderBot.{u4} (Set.{u4} α) (Preorder.toLE.{u4} (Set.{u4} α) (PartialOrder.toPreorder.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))))) (CompleteLattice.toBoundedOrder.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (X i) (X j))) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u2} (H i) h (OfNat.ofNat.{u2} (H i) 1 (One.toOfNat1.{u2} (H i) (InvOneClass.toOne.{u2} (H i) (DivInvOneMonoid.toInvOneClass.{u2} (H i) (DivisionMonoid.toDivInvOneMonoid.{u2} (H i) (Group.toDivisionMonoid.{u2} (H i) (_inst_4 i)))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.instHasSubsetSet.{u4} α) (HSMul.hSMul.{u1, u4, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Set.{u4} α) (Set.{u4} α) (instHSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Set.{u4} α) (Set.smulSet.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) α (MulAction.toSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) α (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) _inst_3)) _inst_5))) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) (fun (_x : H i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) _x) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (MulOneClass.toMul.{u2} (H i) (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (f i) h) (X j)) (X i)))) -> (forall {w : FreeProduct.Word.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))}, (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.Word.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) w)) (FunLike.coe.{max (max (succ u3) (succ u1)) (succ u2), max (succ u3) (succ u2), succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (fun (_x : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) _x) (MulHomClass.toFunLike.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (MulOneClass.toMul.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{max u3 u2, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (Equiv.{max (max (succ u3) (succ u2)) (succ u1), max (succ u1) (succ (max u2 u3))} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (fun (_x : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) _x) (Equiv.instFunLikeEquiv.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (FreeProduct.lift.{u3, u2, u1} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) f) (FreeProduct.Word.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) w)) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.Word.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) w)) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.Word.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) w)) (InvOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.Word.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) w)) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.Word.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) w)) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.Word.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) w)) (Group.toDivisionMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.Word.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) w)) _inst_3))))))) -> (Eq.{max (succ u3) (succ u2)} (FreeProduct.Word.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) w (FreeProduct.Word.empty.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))))))
+  forall {ι : Type.{u3}} [hnontriv : Nontrivial.{u3} ι] {G : Type.{u1}} [_inst_3 : Group.{u1} G] {H : ι -> Type.{u2}} [_inst_4 : forall (i : ι), Group.{u2} (H i)] (f : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))), (Or (LE.le.{succ u3} Cardinal.{u3} Cardinal.instLECardinal.{u3} (OfNat.ofNat.{succ u3} Cardinal.{u3} 3 (instOfNat.{succ u3} Cardinal.{u3} 3 Cardinal.instNatCastCardinal.{u3} (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))) (Cardinal.mk.{u3} ι)) (Exists.{succ u3} ι (fun (i : ι) => LE.le.{succ u2} Cardinal.{u2} Cardinal.instLECardinal.{u2} (OfNat.ofNat.{succ u2} Cardinal.{u2} 3 (instOfNat.{succ u2} Cardinal.{u2} 3 Cardinal.instNatCastCardinal.{u2} (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))) (Cardinal.mk.{u2} (H i))))) -> (forall {α : Type.{u4}} [_inst_5 : MulAction.{u1, u4} G α (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (BoundedOrder.toOrderBot.{u4} (Set.{u4} α) (Preorder.toLE.{u4} (Set.{u4} α) (PartialOrder.toPreorder.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))))) (CompleteLattice.toBoundedOrder.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (X i) (X j))) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u2} (H i) h (OfNat.ofNat.{u2} (H i) 1 (One.toOfNat1.{u2} (H i) (InvOneClass.toOne.{u2} (H i) (DivInvOneMonoid.toInvOneClass.{u2} (H i) (DivisionMonoid.toDivInvOneMonoid.{u2} (H i) (Group.toDivisionMonoid.{u2} (H i) (_inst_4 i)))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.instHasSubsetSet.{u4} α) (HSMul.hSMul.{u1, u4, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Set.{u4} α) (Set.{u4} α) (instHSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Set.{u4} α) (Set.smulSet.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) α (MulAction.toSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) α (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) _inst_3)) _inst_5))) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) (fun (_x : H i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) _x) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (MulOneClass.toMul.{u2} (H i) (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (f i) h) (X j)) (X i)))) -> (forall {w : FreeProduct.Word.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))}, (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.Word.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) w)) (FunLike.coe.{max (max (succ u3) (succ u1)) (succ u2), max (succ u3) (succ u2), succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (fun (_x : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) _x) (MulHomClass.toFunLike.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (MulOneClass.toMul.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{max u3 u2, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (Equiv.{max (max (succ u3) (succ u2)) (succ u1), max (succ u1) (succ (max u2 u3))} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (fun (_x : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) _x) (Equiv.instFunLikeEquiv.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (FreeProduct.lift.{u3, u2, u1} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) f) (FreeProduct.Word.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) w)) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.Word.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) w)) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.Word.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) w)) (InvOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.Word.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) w)) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.Word.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) w)) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.Word.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) w)) (Group.toDivisionMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.Word.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) w)) _inst_3))))))) -> (Eq.{max (succ u3) (succ u2)} (FreeProduct.Word.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) w (FreeProduct.Word.empty.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))))))
 Case conversion may be inaccurate. Consider using '#align free_product.empty_of_word_prod_eq_one FreeProduct.empty_of_word_prod_eq_oneₓ'. -/
 theorem empty_of_word_prod_eq_one {w : Word H} (h : lift f w.Prod = 1) : w = Word.empty :=
   by
@@ -1138,7 +1138,7 @@ theorem empty_of_word_prod_eq_one {w : Word H} (h : lift f w.Prod = 1) : w = Wor
 lean 3 declaration is
   forall {ι : Type.{u1}} [hnontriv : Nontrivial.{u1} ι] {G : Type.{u2}} [_inst_3 : Group.{u2} G] {H : ι -> Type.{u3}} [_inst_4 : forall (i : ι), Group.{u3} (H i)] (f : forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))), (Or (LE.le.{succ u1} Cardinal.{u1} Cardinal.hasLe.{u1} (OfNat.ofNat.{succ u1} Cardinal.{u1} 3 (OfNat.mk.{succ u1} Cardinal.{u1} 3 (bit1.{succ u1} Cardinal.{u1} Cardinal.hasOne.{u1} Cardinal.hasAdd.{u1} (One.one.{succ u1} Cardinal.{u1} Cardinal.hasOne.{u1})))) (Cardinal.mk.{u1} ι)) (Exists.{succ u1} ι (fun (i : ι) => LE.le.{succ u3} Cardinal.{u3} Cardinal.hasLe.{u3} (OfNat.ofNat.{succ u3} Cardinal.{u3} 3 (OfNat.mk.{succ u3} Cardinal.{u3} 3 (bit1.{succ u3} Cardinal.{u3} Cardinal.hasOne.{u3} Cardinal.hasAdd.{u3} (One.one.{succ u3} Cardinal.{u3} Cardinal.hasOne.{u3})))) (Cardinal.mk.{u3} (H i))))) -> (forall {α : Type.{u4}} [_inst_5 : MulAction.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.completeBooleanAlgebra.{u4} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u4} (Set.{u4} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u4} (Set.{u4} α) (Set.booleanAlgebra.{u4} α))) (X i) (X j))) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u3} (H i) h (OfNat.ofNat.{u3} (H i) 1 (OfNat.mk.{u3} (H i) 1 (One.one.{u3} (H i) (MulOneClass.toHasOne.{u3} (H i) (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.hasSubset.{u4} α) (SMul.smul.{u2, u4} G (Set.{u4} α) (Set.smulSet.{u2, u4} G α (MulAction.toHasSmul.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)) _inst_5)) (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (H i) -> G) (MonoidHom.hasCoeToFun.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (f i) h) (X j)) (X i)))) -> (Function.Injective.{succ (max u1 u3), succ u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (coeFn.{max (succ u2) (succ (max u1 u3)), max (succ (max u1 u3)) (succ u2)} (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) -> G) (MonoidHom.hasCoeToFun.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (coeFn.{max 1 (max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))) (max (succ u2) (succ (max u1 u3))) (succ u1) (succ u2) (succ u3), max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))} (Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (fun (_x : Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) => (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) -> (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (FreeProduct.lift.{u1, u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) f))))
 but is expected to have type
-  forall {ι : Type.{u3}} [hnontriv : Nontrivial.{u3} ι] {G : Type.{u1}} [_inst_3 : Group.{u1} G] {H : ι -> Type.{u2}} [_inst_4 : forall (i : ι), Group.{u2} (H i)] (f : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))), (Or (LE.le.{succ u3} Cardinal.{u3} Cardinal.instLECardinal.{u3} (OfNat.ofNat.{succ u3} Cardinal.{u3} 3 (instOfNat.{succ u3} Cardinal.{u3} 3 Cardinal.instNatCastCardinal.{u3} (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))) (Cardinal.mk.{u3} ι)) (Exists.{succ u3} ι (fun (i : ι) => LE.le.{succ u2} Cardinal.{u2} Cardinal.instLECardinal.{u2} (OfNat.ofNat.{succ u2} Cardinal.{u2} 3 (instOfNat.{succ u2} Cardinal.{u2} 3 Cardinal.instNatCastCardinal.{u2} (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))) (Cardinal.mk.{u2} (H i))))) -> (forall {α : Type.{u4}} [_inst_5 : MulAction.{u1, u4} G α (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (BoundedOrder.toOrderBot.{u4} (Set.{u4} α) (Preorder.toLE.{u4} (Set.{u4} α) (PartialOrder.toPreorder.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))))) (CompleteLattice.toBoundedOrder.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (X i) (X j))) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u2} (H i) h (OfNat.ofNat.{u2} (H i) 1 (One.toOfNat1.{u2} (H i) (InvOneClass.toOne.{u2} (H i) (DivInvOneMonoid.toInvOneClass.{u2} (H i) (DivisionMonoid.toDivInvOneMonoid.{u2} (H i) (Group.toDivisionMonoid.{u2} (H i) (_inst_4 i)))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.instHasSubsetSet.{u4} α) (HSMul.hSMul.{u1, u4, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Set.{u4} α) (Set.{u4} α) (instHSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Set.{u4} α) (Set.smulSet.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) α (MulAction.toSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) α (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) _inst_3)) _inst_5))) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) (fun (_x : H i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) _x) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (MulOneClass.toMul.{u2} (H i) (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (f i) h) (X j)) (X i)))) -> (Function.Injective.{max (succ u3) (succ u2), succ u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (FunLike.coe.{max (max (succ u3) (succ u1)) (succ u2), max (succ u3) (succ u2), succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (fun (_x : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) _x) (MulHomClass.toFunLike.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (MulOneClass.toMul.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{max u3 u2, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (Equiv.{max (max (succ u3) (succ u2)) (succ u1), max (succ u1) (succ (max u2 u3))} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (fun (_x : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) _x) (Equiv.instFunLikeEquiv.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (FreeProduct.lift.{u3, u2, u1} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) f))))
+  forall {ι : Type.{u3}} [hnontriv : Nontrivial.{u3} ι] {G : Type.{u1}} [_inst_3 : Group.{u1} G] {H : ι -> Type.{u2}} [_inst_4 : forall (i : ι), Group.{u2} (H i)] (f : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))), (Or (LE.le.{succ u3} Cardinal.{u3} Cardinal.instLECardinal.{u3} (OfNat.ofNat.{succ u3} Cardinal.{u3} 3 (instOfNat.{succ u3} Cardinal.{u3} 3 Cardinal.instNatCastCardinal.{u3} (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))) (Cardinal.mk.{u3} ι)) (Exists.{succ u3} ι (fun (i : ι) => LE.le.{succ u2} Cardinal.{u2} Cardinal.instLECardinal.{u2} (OfNat.ofNat.{succ u2} Cardinal.{u2} 3 (instOfNat.{succ u2} Cardinal.{u2} 3 Cardinal.instNatCastCardinal.{u2} (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))) (Cardinal.mk.{u2} (H i))))) -> (forall {α : Type.{u4}} [_inst_5 : MulAction.{u1, u4} G α (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (BoundedOrder.toOrderBot.{u4} (Set.{u4} α) (Preorder.toLE.{u4} (Set.{u4} α) (PartialOrder.toPreorder.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))))) (CompleteLattice.toBoundedOrder.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (X i) (X j))) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u2} (H i) h (OfNat.ofNat.{u2} (H i) 1 (One.toOfNat1.{u2} (H i) (InvOneClass.toOne.{u2} (H i) (DivInvOneMonoid.toInvOneClass.{u2} (H i) (DivisionMonoid.toDivInvOneMonoid.{u2} (H i) (Group.toDivisionMonoid.{u2} (H i) (_inst_4 i)))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.instHasSubsetSet.{u4} α) (HSMul.hSMul.{u1, u4, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Set.{u4} α) (Set.{u4} α) (instHSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Set.{u4} α) (Set.smulSet.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) α (MulAction.toSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) α (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) h) _inst_3)) _inst_5))) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) (fun (_x : H i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : H i) => G) _x) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (MulOneClass.toMul.{u2} (H i) (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (f i) h) (X j)) (X i)))) -> (Function.Injective.{max (succ u3) (succ u2), succ u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (FunLike.coe.{max (max (succ u3) (succ u1)) (succ u2), max (succ u3) (succ u2), succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (fun (_x : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) _x) (MulHomClass.toFunLike.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (MulOneClass.toMul.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{max u3 u2, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (Equiv.{max (max (succ u3) (succ u2)) (succ u1), max (succ u1) (succ (max u2 u3))} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (fun (_x : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) _x) (Equiv.instFunLikeEquiv.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (FreeProduct.lift.{u3, u2, u1} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) f))))
 Case conversion may be inaccurate. Consider using '#align free_product.lift_injective_of_ping_pong FreeProduct.lift_injective_of_ping_pongₓ'. -/
 /-- The Ping-Pong-Lemma.
 
@@ -1240,7 +1240,7 @@ include hXnonempty hXdisj hYdisj hXYdisj hX hY
 lean 3 declaration is
   forall {ι : Type.{u_1}} [_inst_3 : Nontrivial.{u_1} ι] {G : Type.{u_1}} [_inst_4 : Group.{u_1} G] (a : ι -> G) {α : Type.{u_4}} [_inst_5 : MulAction.{u_1, u_4} G α (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4))] (X : ι -> (Set.{u_4} α)) (Y : ι -> (Set.{u_4} α)), (forall (i : ι), Set.Nonempty.{u_4} α (X i)) -> (Pairwise.{u_1} ι (fun (i : ι) (j : ι) => Disjoint.{u_4} (Set.{u_4} α) (CompleteSemilatticeInf.toPartialOrder.{u_4} (Set.{u_4} α) (CompleteLattice.toCompleteSemilatticeInf.{u_4} (Set.{u_4} α) (Order.Coframe.toCompleteLattice.{u_4} (Set.{u_4} α) (CompleteDistribLattice.toCoframe.{u_4} (Set.{u_4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_4} (Set.{u_4} α) (Set.completeBooleanAlgebra.{u_4} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u_4} (Set.{u_4} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u_4} (Set.{u_4} α) (Set.booleanAlgebra.{u_4} α))) (X i) (X j))) -> (Pairwise.{u_1} ι (fun (i : ι) (j : ι) => Disjoint.{u_4} (Set.{u_4} α) (CompleteSemilatticeInf.toPartialOrder.{u_4} (Set.{u_4} α) (CompleteLattice.toCompleteSemilatticeInf.{u_4} (Set.{u_4} α) (Order.Coframe.toCompleteLattice.{u_4} (Set.{u_4} α) (CompleteDistribLattice.toCoframe.{u_4} (Set.{u_4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_4} (Set.{u_4} α) (Set.completeBooleanAlgebra.{u_4} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u_4} (Set.{u_4} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u_4} (Set.{u_4} α) (Set.booleanAlgebra.{u_4} α))) (Y i) (Y j))) -> (forall (i : ι) (j : ι), Disjoint.{u_4} (Set.{u_4} α) (CompleteSemilatticeInf.toPartialOrder.{u_4} (Set.{u_4} α) (CompleteLattice.toCompleteSemilatticeInf.{u_4} (Set.{u_4} α) (Order.Coframe.toCompleteLattice.{u_4} (Set.{u_4} α) (CompleteDistribLattice.toCoframe.{u_4} (Set.{u_4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_4} (Set.{u_4} α) (Set.completeBooleanAlgebra.{u_4} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u_4} (Set.{u_4} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u_4} (Set.{u_4} α) (Set.booleanAlgebra.{u_4} α))) (X i) (Y j)) -> (forall (i : ι), HasSubset.Subset.{u_4} (Set.{u_4} α) (Set.hasSubset.{u_4} α) (SMul.smul.{u_1, u_4} G (Set.{u_4} α) (Set.smulSet.{u_1, u_4} G α (MulAction.toHasSmul.{u_1, u_4} G α (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)) _inst_5)) (a i) (HasCompl.compl.{u_4} (Set.{u_4} α) (BooleanAlgebra.toHasCompl.{u_4} (Set.{u_4} α) (Set.booleanAlgebra.{u_4} α)) (Y i))) (X i)) -> (forall (i : ι), HasSubset.Subset.{u_4} (Set.{u_4} α) (Set.hasSubset.{u_4} α) (SMul.smul.{u_1, u_4} G (Set.{u_4} α) (Set.smulSet.{u_1, u_4} G α (MulAction.toHasSmul.{u_1, u_4} G α (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)) _inst_5)) (Inv.inv.{u_1} (ι -> G) (Pi.instInv.{u_1, u_1} ι (fun (ᾰ : ι) => G) (fun (i : ι) => DivInvMonoid.toHasInv.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4))) a i) (HasCompl.compl.{u_4} (Set.{u_4} α) (BooleanAlgebra.toHasCompl.{u_4} (Set.{u_4} α) (Set.booleanAlgebra.{u_4} α)) (X i))) (Y i)) -> (Function.Injective.{succ u_1, succ u_1} (FreeGroup.{u_1} ι) G (coeFn.{succ u_1, succ u_1} (MonoidHom.{u_1, u_1} (FreeGroup.{u_1} ι) G (Monoid.toMulOneClass.{u_1} (FreeGroup.{u_1} ι) (DivInvMonoid.toMonoid.{u_1} (FreeGroup.{u_1} ι) (Group.toDivInvMonoid.{u_1} (FreeGroup.{u_1} ι) (FreeGroup.group.{u_1} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)))) (fun (_x : MonoidHom.{u_1, u_1} (FreeGroup.{u_1} ι) G (Monoid.toMulOneClass.{u_1} (FreeGroup.{u_1} ι) (DivInvMonoid.toMonoid.{u_1} (FreeGroup.{u_1} ι) (Group.toDivInvMonoid.{u_1} (FreeGroup.{u_1} ι) (FreeGroup.group.{u_1} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)))) => (FreeGroup.{u_1} ι) -> G) (MonoidHom.hasCoeToFun.{u_1, u_1} (FreeGroup.{u_1} ι) G (Monoid.toMulOneClass.{u_1} (FreeGroup.{u_1} ι) (DivInvMonoid.toMonoid.{u_1} (FreeGroup.{u_1} ι) (Group.toDivInvMonoid.{u_1} (FreeGroup.{u_1} ι) (FreeGroup.group.{u_1} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)))) (coeFn.{max 1 (succ u_1), succ u_1} (Equiv.{succ u_1, succ u_1} (ι -> G) (MonoidHom.{u_1, u_1} (FreeGroup.{u_1} ι) G (Monoid.toMulOneClass.{u_1} (FreeGroup.{u_1} ι) (DivInvMonoid.toMonoid.{u_1} (FreeGroup.{u_1} ι) (Group.toDivInvMonoid.{u_1} (FreeGroup.{u_1} ι) (FreeGroup.group.{u_1} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4))))) (fun (_x : Equiv.{succ u_1, succ u_1} (ι -> G) (MonoidHom.{u_1, u_1} (FreeGroup.{u_1} ι) G (Monoid.toMulOneClass.{u_1} (FreeGroup.{u_1} ι) (DivInvMonoid.toMonoid.{u_1} (FreeGroup.{u_1} ι) (Group.toDivInvMonoid.{u_1} (FreeGroup.{u_1} ι) (FreeGroup.group.{u_1} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4))))) => (ι -> G) -> (MonoidHom.{u_1, u_1} (FreeGroup.{u_1} ι) G (Monoid.toMulOneClass.{u_1} (FreeGroup.{u_1} ι) (DivInvMonoid.toMonoid.{u_1} (FreeGroup.{u_1} ι) (Group.toDivInvMonoid.{u_1} (FreeGroup.{u_1} ι) (FreeGroup.group.{u_1} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4))))) (Equiv.hasCoeToFun.{succ u_1, succ u_1} (ι -> G) (MonoidHom.{u_1, u_1} (FreeGroup.{u_1} ι) G (Monoid.toMulOneClass.{u_1} (FreeGroup.{u_1} ι) (DivInvMonoid.toMonoid.{u_1} (FreeGroup.{u_1} ι) (Group.toDivInvMonoid.{u_1} (FreeGroup.{u_1} ι) (FreeGroup.group.{u_1} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4))))) (FreeGroup.lift.{u_1, u_1} ι G _inst_4) a)))
 but is expected to have type
-  forall {ι : Type.{u_2}} [_inst_3 : Nontrivial.{u_2} ι] {G : Type.{u_1}} [_inst_4 : Group.{u_1} G] (a : ι -> G) {α : Type.{u_3}} [_inst_5 : MulAction.{u_1, u_3} G α (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4))] (X : ι -> (Set.{u_3} α)) (Y : ι -> (Set.{u_3} α)), (forall (i : ι), Set.Nonempty.{u_3} α (X i)) -> (Pairwise.{u_2} ι (fun (i : ι) (j : ι) => Disjoint.{u_3} (Set.{u_3} α) (CompleteSemilatticeInf.toPartialOrder.{u_3} (Set.{u_3} α) (CompleteLattice.toCompleteSemilatticeInf.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))) (BoundedOrder.toOrderBot.{u_3} (Set.{u_3} α) (Preorder.toLE.{u_3} (Set.{u_3} α) (PartialOrder.toPreorder.{u_3} (Set.{u_3} α) (CompleteSemilatticeInf.toPartialOrder.{u_3} (Set.{u_3} α) (CompleteLattice.toCompleteSemilatticeInf.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))))) (CompleteLattice.toBoundedOrder.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))) (X i) (X j))) -> (Pairwise.{u_2} ι (fun (i : ι) (j : ι) => Disjoint.{u_3} (Set.{u_3} α) (CompleteSemilatticeInf.toPartialOrder.{u_3} (Set.{u_3} α) (CompleteLattice.toCompleteSemilatticeInf.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))) (BoundedOrder.toOrderBot.{u_3} (Set.{u_3} α) (Preorder.toLE.{u_3} (Set.{u_3} α) (PartialOrder.toPreorder.{u_3} (Set.{u_3} α) (CompleteSemilatticeInf.toPartialOrder.{u_3} (Set.{u_3} α) (CompleteLattice.toCompleteSemilatticeInf.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))))) (CompleteLattice.toBoundedOrder.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))) (Y i) (Y j))) -> (forall (i : ι) (j : ι), Disjoint.{u_3} (Set.{u_3} α) (CompleteSemilatticeInf.toPartialOrder.{u_3} (Set.{u_3} α) (CompleteLattice.toCompleteSemilatticeInf.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))) (BoundedOrder.toOrderBot.{u_3} (Set.{u_3} α) (Preorder.toLE.{u_3} (Set.{u_3} α) (PartialOrder.toPreorder.{u_3} (Set.{u_3} α) (CompleteSemilatticeInf.toPartialOrder.{u_3} (Set.{u_3} α) (CompleteLattice.toCompleteSemilatticeInf.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))))) (CompleteLattice.toBoundedOrder.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))) (X i) (Y j)) -> (forall (i : ι), HasSubset.Subset.{u_3} (Set.{u_3} α) (Set.instHasSubsetSet.{u_3} α) (HSMul.hSMul.{u_1, u_3, u_3} G (Set.{u_3} α) (Set.{u_3} α) (instHSMul.{u_1, u_3} G (Set.{u_3} α) (Set.smulSet.{u_1, u_3} G α (MulAction.toSMul.{u_1, u_3} G α (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)) _inst_5))) (a i) (HasCompl.compl.{u_3} (Set.{u_3} α) (BooleanAlgebra.toHasCompl.{u_3} (Set.{u_3} α) (Set.instBooleanAlgebraSet.{u_3} α)) (Y i))) (X i)) -> (forall (i : ι), HasSubset.Subset.{u_3} (Set.{u_3} α) (Set.instHasSubsetSet.{u_3} α) (HSMul.hSMul.{u_1, u_3, u_3} G (Set.{u_3} α) (Set.{u_3} α) (instHSMul.{u_1, u_3} G (Set.{u_3} α) (Set.smulSet.{u_1, u_3} G α (MulAction.toSMul.{u_1, u_3} G α (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)) _inst_5))) (Inv.inv.{max u_1 u_2} (ι -> G) (Pi.instInv.{u_2, u_1} ι (fun (ᾰ : ι) => G) (fun (i : ι) => InvOneClass.toInv.{u_1} G (DivInvOneMonoid.toInvOneClass.{u_1} G (DivisionMonoid.toDivInvOneMonoid.{u_1} G (Group.toDivisionMonoid.{u_1} G _inst_4))))) a i) (HasCompl.compl.{u_3} (Set.{u_3} α) (BooleanAlgebra.toHasCompl.{u_3} (Set.{u_3} α) (Set.instBooleanAlgebraSet.{u_3} α)) (X i))) (Y i)) -> (Function.Injective.{succ u_2, succ u_1} (FreeGroup.{u_2} ι) G (FunLike.coe.{max (succ u_1) (succ u_2), succ u_2, succ u_1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : ι -> G) => MonoidHom.{u_2, u_1} (FreeGroup.{u_2} ι) G (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)))) a) (FreeGroup.{u_2} ι) (fun (_x : FreeGroup.{u_2} ι) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeGroup.{u_2} ι) => G) _x) (MulHomClass.toFunLike.{max u_1 u_2, u_2, u_1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : ι -> G) => MonoidHom.{u_2, u_1} (FreeGroup.{u_2} ι) G (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)))) a) (FreeGroup.{u_2} ι) G (MulOneClass.toMul.{u_2} (FreeGroup.{u_2} ι) (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι))))) (MulOneClass.toMul.{u_1} G (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)))) (MonoidHomClass.toMulHomClass.{max u_1 u_2, u_2, u_1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : ι -> G) => MonoidHom.{u_2, u_1} (FreeGroup.{u_2} ι) G (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)))) a) (FreeGroup.{u_2} ι) G (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4))) (MonoidHom.monoidHomClass.{u_2, u_1} (FreeGroup.{u_2} ι) G (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)))))) (FunLike.coe.{max (succ u_1) (succ u_2), max (succ u_1) (succ u_2), max (succ u_1) (succ u_2)} (Equiv.{max (succ u_2) (succ u_1), max (succ u_1) (succ u_2)} (ι -> G) (MonoidHom.{u_2, u_1} (FreeGroup.{u_2} ι) G (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4))))) (ι -> G) (fun (_x : ι -> G) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : ι -> G) => MonoidHom.{u_2, u_1} (FreeGroup.{u_2} ι) G (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)))) _x) (Equiv.instFunLikeEquiv.{max (succ u_1) (succ u_2), max (succ u_1) (succ u_2)} (ι -> G) (MonoidHom.{u_2, u_1} (FreeGroup.{u_2} ι) G (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4))))) (FreeGroup.lift.{u_2, u_1} ι G _inst_4) a)))
+  forall {ι : Type.{u_2}} [_inst_3 : Nontrivial.{u_2} ι] {G : Type.{u_1}} [_inst_4 : Group.{u_1} G] (a : ι -> G) {α : Type.{u_3}} [_inst_5 : MulAction.{u_1, u_3} G α (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4))] (X : ι -> (Set.{u_3} α)) (Y : ι -> (Set.{u_3} α)), (forall (i : ι), Set.Nonempty.{u_3} α (X i)) -> (Pairwise.{u_2} ι (fun (i : ι) (j : ι) => Disjoint.{u_3} (Set.{u_3} α) (CompleteSemilatticeInf.toPartialOrder.{u_3} (Set.{u_3} α) (CompleteLattice.toCompleteSemilatticeInf.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))) (BoundedOrder.toOrderBot.{u_3} (Set.{u_3} α) (Preorder.toLE.{u_3} (Set.{u_3} α) (PartialOrder.toPreorder.{u_3} (Set.{u_3} α) (CompleteSemilatticeInf.toPartialOrder.{u_3} (Set.{u_3} α) (CompleteLattice.toCompleteSemilatticeInf.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))))) (CompleteLattice.toBoundedOrder.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))) (X i) (X j))) -> (Pairwise.{u_2} ι (fun (i : ι) (j : ι) => Disjoint.{u_3} (Set.{u_3} α) (CompleteSemilatticeInf.toPartialOrder.{u_3} (Set.{u_3} α) (CompleteLattice.toCompleteSemilatticeInf.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))) (BoundedOrder.toOrderBot.{u_3} (Set.{u_3} α) (Preorder.toLE.{u_3} (Set.{u_3} α) (PartialOrder.toPreorder.{u_3} (Set.{u_3} α) (CompleteSemilatticeInf.toPartialOrder.{u_3} (Set.{u_3} α) (CompleteLattice.toCompleteSemilatticeInf.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))))) (CompleteLattice.toBoundedOrder.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))) (Y i) (Y j))) -> (forall (i : ι) (j : ι), Disjoint.{u_3} (Set.{u_3} α) (CompleteSemilatticeInf.toPartialOrder.{u_3} (Set.{u_3} α) (CompleteLattice.toCompleteSemilatticeInf.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))) (BoundedOrder.toOrderBot.{u_3} (Set.{u_3} α) (Preorder.toLE.{u_3} (Set.{u_3} α) (PartialOrder.toPreorder.{u_3} (Set.{u_3} α) (CompleteSemilatticeInf.toPartialOrder.{u_3} (Set.{u_3} α) (CompleteLattice.toCompleteSemilatticeInf.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))))) (CompleteLattice.toBoundedOrder.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))) (X i) (Y j)) -> (forall (i : ι), HasSubset.Subset.{u_3} (Set.{u_3} α) (Set.instHasSubsetSet.{u_3} α) (HSMul.hSMul.{u_1, u_3, u_3} G (Set.{u_3} α) (Set.{u_3} α) (instHSMul.{u_1, u_3} G (Set.{u_3} α) (Set.smulSet.{u_1, u_3} G α (MulAction.toSMul.{u_1, u_3} G α (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)) _inst_5))) (a i) (HasCompl.compl.{u_3} (Set.{u_3} α) (BooleanAlgebra.toHasCompl.{u_3} (Set.{u_3} α) (Set.instBooleanAlgebraSet.{u_3} α)) (Y i))) (X i)) -> (forall (i : ι), HasSubset.Subset.{u_3} (Set.{u_3} α) (Set.instHasSubsetSet.{u_3} α) (HSMul.hSMul.{u_1, u_3, u_3} G (Set.{u_3} α) (Set.{u_3} α) (instHSMul.{u_1, u_3} G (Set.{u_3} α) (Set.smulSet.{u_1, u_3} G α (MulAction.toSMul.{u_1, u_3} G α (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)) _inst_5))) (Inv.inv.{max u_1 u_2} (ι -> G) (Pi.instInv.{u_2, u_1} ι (fun (ᾰ : ι) => G) (fun (i : ι) => InvOneClass.toInv.{u_1} G (DivInvOneMonoid.toInvOneClass.{u_1} G (DivisionMonoid.toDivInvOneMonoid.{u_1} G (Group.toDivisionMonoid.{u_1} G _inst_4))))) a i) (HasCompl.compl.{u_3} (Set.{u_3} α) (BooleanAlgebra.toHasCompl.{u_3} (Set.{u_3} α) (Set.instBooleanAlgebraSet.{u_3} α)) (X i))) (Y i)) -> (Function.Injective.{succ u_2, succ u_1} (FreeGroup.{u_2} ι) G (FunLike.coe.{max (succ u_1) (succ u_2), succ u_2, succ u_1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> G) => MonoidHom.{u_2, u_1} (FreeGroup.{u_2} ι) G (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)))) a) (FreeGroup.{u_2} ι) (fun (_x : FreeGroup.{u_2} ι) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeGroup.{u_2} ι) => G) _x) (MulHomClass.toFunLike.{max u_1 u_2, u_2, u_1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> G) => MonoidHom.{u_2, u_1} (FreeGroup.{u_2} ι) G (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)))) a) (FreeGroup.{u_2} ι) G (MulOneClass.toMul.{u_2} (FreeGroup.{u_2} ι) (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι))))) (MulOneClass.toMul.{u_1} G (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)))) (MonoidHomClass.toMulHomClass.{max u_1 u_2, u_2, u_1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> G) => MonoidHom.{u_2, u_1} (FreeGroup.{u_2} ι) G (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)))) a) (FreeGroup.{u_2} ι) G (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4))) (MonoidHom.monoidHomClass.{u_2, u_1} (FreeGroup.{u_2} ι) G (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)))))) (FunLike.coe.{max (succ u_1) (succ u_2), max (succ u_1) (succ u_2), max (succ u_1) (succ u_2)} (Equiv.{max (succ u_2) (succ u_1), max (succ u_1) (succ u_2)} (ι -> G) (MonoidHom.{u_2, u_1} (FreeGroup.{u_2} ι) G (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4))))) (ι -> G) (fun (_x : ι -> G) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : ι -> G) => MonoidHom.{u_2, u_1} (FreeGroup.{u_2} ι) G (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)))) _x) (Equiv.instFunLikeEquiv.{max (succ u_1) (succ u_2), max (succ u_1) (succ u_2)} (ι -> G) (MonoidHom.{u_2, u_1} (FreeGroup.{u_2} ι) G (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4))))) (FreeGroup.lift.{u_2, u_1} ι G _inst_4) a)))
 Case conversion may be inaccurate. Consider using '#align free_group.injective_lift_of_ping_pong FreeGroup.injective_lift_of_ping_pongₓ'. -/
 /-- The Ping-Pong-Lemma.
 
Diff
@@ -237,7 +237,7 @@ theorem of_injective (i : ι) : Function.Injective ⇑(of : M i →* _) := by
 
 /- warning: free_product.lift_mrange_le -> FreeProduct.lift_mrange_le is a dubious translation:
 lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {N : Type.{u3}} [_inst_3 : Monoid.{u3} N] (f : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) {s : Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)}, (forall (i : ι), LE.le.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (Preorder.toLE.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (SetLike.partialOrder.{u3, u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) N (Submonoid.setLike.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3))))) (MonoidHom.mrange.{u2, u3, max u3 u2} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3) (MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.monoidHomClass.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (f i)) s) -> (LE.le.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (Preorder.toLE.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (SetLike.partialOrder.{u3, u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) N (Submonoid.setLike.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3))))) (MonoidHom.mrange.{max u1 u2, u3, max u3 u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.monoidHomClass.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) (coeFn.{max 1 (max (max (succ u1) (succ u3) (succ u2)) (succ u3) (succ (max u1 u2))) (max (succ u3) (succ (max u1 u2))) (succ u1) (succ u3) (succ u2), max (max (succ u1) (succ u3) (succ u2)) (succ u3) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (fun (_x : Equiv.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) => (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) -> (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (Equiv.hasCoeToFun.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (FreeProduct.lift.{u1, u2, u3} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i) N _inst_3) f)) s)
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {N : Type.{u3}} [_inst_3 : Monoid.{u3} N] (f : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) {s : Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)}, (forall (i : ι), LE.le.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (Preorder.toHasLe.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (SetLike.partialOrder.{u3, u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) N (Submonoid.setLike.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3))))) (MonoidHom.mrange.{u2, u3, max u3 u2} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3) (MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.monoidHomClass.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (f i)) s) -> (LE.le.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (Preorder.toHasLe.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (SetLike.partialOrder.{u3, u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) N (Submonoid.setLike.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3))))) (MonoidHom.mrange.{max u1 u2, u3, max u3 u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.monoidHomClass.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) (coeFn.{max 1 (max (max (succ u1) (succ u3) (succ u2)) (succ u3) (succ (max u1 u2))) (max (succ u3) (succ (max u1 u2))) (succ u1) (succ u3) (succ u2), max (max (succ u1) (succ u3) (succ u2)) (succ u3) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (fun (_x : Equiv.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) => (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) -> (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (Equiv.hasCoeToFun.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (FreeProduct.lift.{u1, u2, u3} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i) N _inst_3) f)) s)
 but is expected to have type
   forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {N : Type.{u3}} [_inst_3 : Monoid.{u3} N] (f : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) {s : Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)}, (forall (i : ι), LE.le.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (Preorder.toLE.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (Submonoid.instCompleteLatticeSubmonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)))))) (MonoidHom.mrange.{u2, u3, max u2 u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3) (MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.monoidHomClass.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (f i)) s) -> (LE.le.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (Preorder.toLE.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (Submonoid.instCompleteLatticeSubmonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)))))) (MonoidHom.mrange.{max u1 u2, u3, max (max u1 u2) u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3) ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) f) (MonoidHom.monoidHomClass.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1)} (Equiv.{max (max (succ u1) (succ u2)) (succ u3), max (succ u3) (succ (max u2 u1))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (fun (_x : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) _x) (Equiv.instFunLikeEquiv.{max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1)} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (FreeProduct.lift.{u1, u2, u3} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i) N _inst_3) f)) s)
 Case conversion may be inaccurate. Consider using '#align free_product.lift_mrange_le FreeProduct.lift_mrange_leₓ'. -/
@@ -300,7 +300,7 @@ instance : Group (FreeProduct G) :=
 
 /- warning: free_product.lift_range_le -> FreeProduct.lift_range_le is a dubious translation:
 lean 3 declaration is
-  forall {ι : Type.{u1}} (G : ι -> Type.{u2}) [_inst_3 : forall (i : ι), Group.{u2} (G i)] {N : Type.{u3}} [_inst_4 : Group.{u3} N] (f : forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) {s : Subgroup.{u3} N _inst_4}, (forall (i : ι), LE.le.{u3} (Subgroup.{u3} N _inst_4) (Preorder.toLE.{u3} (Subgroup.{u3} N _inst_4) (PartialOrder.toPreorder.{u3} (Subgroup.{u3} N _inst_4) (SetLike.partialOrder.{u3, u3} (Subgroup.{u3} N _inst_4) N (Subgroup.setLike.{u3} N _inst_4)))) (MonoidHom.range.{u2, u3} (G i) (_inst_3 i) N _inst_4 (f i)) s) -> (LE.le.{u3} (Subgroup.{u3} N _inst_4) (Preorder.toLE.{u3} (Subgroup.{u3} N _inst_4) (PartialOrder.toPreorder.{u3} (Subgroup.{u3} N _inst_4) (SetLike.partialOrder.{u3, u3} (Subgroup.{u3} N _inst_4) N (Subgroup.setLike.{u3} N _inst_4)))) (MonoidHom.range.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.group.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => _inst_3 i)) N _inst_4 (coeFn.{max 1 (max (max (succ u1) (succ u3) (succ u2)) (succ u3) (succ (max u1 u2))) (max (succ u3) (succ (max u1 u2))) (succ u1) (succ u3) (succ u2), max (max (succ u1) (succ u3) (succ u2)) (succ u3) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))))) (fun (_x : Equiv.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))))) => (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) -> (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))))) (Equiv.hasCoeToFun.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))))) (FreeProduct.lift.{u1, u2, u3} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))) f)) s)
+  forall {ι : Type.{u1}} (G : ι -> Type.{u2}) [_inst_3 : forall (i : ι), Group.{u2} (G i)] {N : Type.{u3}} [_inst_4 : Group.{u3} N] (f : forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) {s : Subgroup.{u3} N _inst_4}, (forall (i : ι), LE.le.{u3} (Subgroup.{u3} N _inst_4) (Preorder.toHasLe.{u3} (Subgroup.{u3} N _inst_4) (PartialOrder.toPreorder.{u3} (Subgroup.{u3} N _inst_4) (SetLike.partialOrder.{u3, u3} (Subgroup.{u3} N _inst_4) N (Subgroup.setLike.{u3} N _inst_4)))) (MonoidHom.range.{u2, u3} (G i) (_inst_3 i) N _inst_4 (f i)) s) -> (LE.le.{u3} (Subgroup.{u3} N _inst_4) (Preorder.toHasLe.{u3} (Subgroup.{u3} N _inst_4) (PartialOrder.toPreorder.{u3} (Subgroup.{u3} N _inst_4) (SetLike.partialOrder.{u3, u3} (Subgroup.{u3} N _inst_4) N (Subgroup.setLike.{u3} N _inst_4)))) (MonoidHom.range.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.group.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => _inst_3 i)) N _inst_4 (coeFn.{max 1 (max (max (succ u1) (succ u3) (succ u2)) (succ u3) (succ (max u1 u2))) (max (succ u3) (succ (max u1 u2))) (succ u1) (succ u3) (succ u2), max (max (succ u1) (succ u3) (succ u2)) (succ u3) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))))) (fun (_x : Equiv.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))))) => (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) -> (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))))) (Equiv.hasCoeToFun.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))))) (FreeProduct.lift.{u1, u2, u3} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))) f)) s)
 but is expected to have type
   forall {ι : Type.{u1}} (G : ι -> Type.{u2}) [_inst_3 : forall (i : ι), Group.{u2} (G i)] {N : Type.{u3}} [_inst_4 : Group.{u3} N] (f : forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) {s : Subgroup.{u3} N _inst_4}, (forall (i : ι), LE.le.{u3} (Subgroup.{u3} N _inst_4) (Preorder.toLE.{u3} (Subgroup.{u3} N _inst_4) (PartialOrder.toPreorder.{u3} (Subgroup.{u3} N _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u3} (Subgroup.{u3} N _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Subgroup.{u3} N _inst_4) (Subgroup.instCompleteLatticeSubgroup.{u3} N _inst_4))))) (MonoidHom.range.{u2, u3} (G i) (_inst_3 i) N _inst_4 (f i)) s) -> (LE.le.{u3} (Subgroup.{u3} N _inst_4) (Preorder.toLE.{u3} (Subgroup.{u3} N _inst_4) (PartialOrder.toPreorder.{u3} (Subgroup.{u3} N _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u3} (Subgroup.{u3} N _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Subgroup.{u3} N _inst_4) (Subgroup.instCompleteLatticeSubgroup.{u3} N _inst_4))))) (MonoidHom.range.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.instGroupFreeProductToMonoidToDivInvMonoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => _inst_3 i)) N _inst_4 (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1)} (Equiv.{max (max (succ u1) (succ u2)) (succ u3), max (succ u3) (succ (max u2 u1))} (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) (MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))))) (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) (fun (_x : forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) => MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) _x) (Equiv.instFunLikeEquiv.{max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1)} (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) (MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))))) (FreeProduct.lift.{u1, u2, u3} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))) f)) s)
 Case conversion may be inaccurate. Consider using '#align free_product.lift_range_le FreeProduct.lift_range_leₓ'. -/
Diff
@@ -253,14 +253,14 @@ theorem lift_mrange_le {N} [Monoid N] (f : ∀ i, M i →* N) {s : Submonoid N}
     exact s.mul_mem hx hy
 #align free_product.lift_mrange_le FreeProduct.lift_mrange_le
 
-#print FreeProduct.mrange_eq_supᵢ /-
-theorem mrange_eq_supᵢ {N} [Monoid N] (f : ∀ i, M i →* N) : (lift f).mrange = ⨆ i, (f i).mrange :=
+#print FreeProduct.mrange_eq_iSup /-
+theorem mrange_eq_iSup {N} [Monoid N] (f : ∀ i, M i →* N) : (lift f).mrange = ⨆ i, (f i).mrange :=
   by
-  apply le_antisymm (lift_mrange_le f fun i => le_supᵢ _ i)
-  apply supᵢ_le _
+  apply le_antisymm (lift_mrange_le f fun i => le_iSup _ i)
+  apply iSup_le _
   rintro i _ ⟨x, rfl⟩
   exact ⟨of x, by simp only [lift_of]⟩
-#align free_product.mrange_eq_supr FreeProduct.mrange_eq_supᵢ
+#align free_product.mrange_eq_supr FreeProduct.mrange_eq_iSup
 -/
 
 section Group
@@ -316,14 +316,14 @@ theorem lift_range_le {N} [Group N] (f : ∀ i, G i →* N) {s : Subgroup N}
     exact s.mul_mem hx hy
 #align free_product.lift_range_le FreeProduct.lift_range_le
 
-#print FreeProduct.range_eq_supᵢ /-
-theorem range_eq_supᵢ {N} [Group N] (f : ∀ i, G i →* N) : (lift f).range = ⨆ i, (f i).range :=
+#print FreeProduct.range_eq_iSup /-
+theorem range_eq_iSup {N} [Group N] (f : ∀ i, G i →* N) : (lift f).range = ⨆ i, (f i).range :=
   by
-  apply le_antisymm (lift_range_le _ f fun i => le_supᵢ _ i)
-  apply supᵢ_le _
+  apply le_antisymm (lift_range_le _ f fun i => le_iSup _ i)
+  apply iSup_le _
   rintro i _ ⟨x, rfl⟩
   exact ⟨of x, by simp only [lift_of]⟩
-#align free_product.range_eq_supr FreeProduct.range_eq_supᵢ
+#align free_product.range_eq_supr FreeProduct.range_eq_iSup
 -/
 
 end Group
Diff
@@ -551,7 +551,7 @@ instance : MulAction (FreeProduct M) (Word M) :=
 lean 3 declaration is
   forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] [_inst_4 : DecidableEq.{succ u1} ι] (i : ι) (w : FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (m : M i), Eq.{succ (max u1 u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (SMul.smul.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulAction.toHasSmul.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mulAction.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b))) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m) w) (FreeProduct.Word.rcons.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i (FreeProduct.Word.Pair.mk.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i (HMul.hMul.{u2, u2, u2} (M i) (M i) (M i) (instHMul.{u2} (M i) (MulOneClass.toHasMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)))) m (FreeProduct.Word.Pair.head.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i (coeFn.{max 1 (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) => (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) -> (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.equivPair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i) w))) (FreeProduct.Word.Pair.tail.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i (coeFn.{max 1 (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) => (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) -> (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.equivPair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i) w)) (FreeProduct.Word.Pair.fstIdx_ne.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i (coeFn.{max 1 (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) => (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) -> (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.equivPair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i) w))))
 but is expected to have type
-  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u1} (M i)] [_inst_4 : DecidableEq.{succ u2} ι] (i : ι) (w : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (m : M i), Eq.{max (succ u2) (succ u1)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (HSMul.hSMul.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instHSMul.{max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulAction.toSMul.{max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.instMulActionFreeProductWordInstMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b)))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) m) w) (FreeProduct.Word.rcons.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i (let src._@.Mathlib.GroupTheory.FreeProduct._hyg.3971 : (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) w := FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (fun (a : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) a) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.equivPair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i) w; FreeProduct.Word.Pair.mk.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i (HMul.hMul.{u1, u1, u1} (M i) (M i) (M i) (instHMul.{u1} (M i) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)))) m (FreeProduct.Word.Pair.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (fun (a : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) a) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.equivPair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i) w))) (FreeProduct.Word.Pair.tail.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i src._@.Mathlib.GroupTheory.FreeProduct._hyg.3971) (FreeProduct.Word.Pair.fstIdx_ne.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i src._@.Mathlib.GroupTheory.FreeProduct._hyg.3971)))
+  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u1} (M i)] [_inst_4 : DecidableEq.{succ u2} ι] (i : ι) (w : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (m : M i), Eq.{max (succ u2) (succ u1)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (HSMul.hSMul.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instHSMul.{max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulAction.toSMul.{max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.instMulActionFreeProductWordInstMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b)))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) m) w) (FreeProduct.Word.rcons.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i (let src._@.Mathlib.GroupTheory.FreeProduct._hyg.3964 : (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) w := FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (fun (a : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) a) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.equivPair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i) w; FreeProduct.Word.Pair.mk.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i (HMul.hMul.{u1, u1, u1} (M i) (M i) (M i) (instHMul.{u1} (M i) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)))) m (FreeProduct.Word.Pair.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (fun (a : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) a) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.equivPair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i) w))) (FreeProduct.Word.Pair.tail.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i src._@.Mathlib.GroupTheory.FreeProduct._hyg.3964) (FreeProduct.Word.Pair.fstIdx_ne.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i src._@.Mathlib.GroupTheory.FreeProduct._hyg.3964)))
 Case conversion may be inaccurate. Consider using '#align free_product.word.of_smul_def FreeProduct.Word.of_smul_defₓ'. -/
 theorem of_smul_def (i) (w : Word M) (m : M i) :
     of m • w = rcons { equivPair i w with headI := m * (equivPair i w).headI } :=
@@ -1190,7 +1190,7 @@ instance {ι : Type _} (G : ι → Type _) [∀ i, Group (G i)] [hG : ∀ i, IsF
 lean 3 declaration is
   forall {ι : Type.{u1}}, MulEquiv.{u1, u1} (FreeGroup.{u1} ι) (FreeProduct.{u1, 0} ι (fun (_x : ι) => FreeGroup.{0} Unit) (fun (i : ι) => DivInvMonoid.toMonoid.{0} (FreeGroup.{0} Unit) (Group.toDivInvMonoid.{0} (FreeGroup.{0} Unit) (FreeGroup.group.{0} Unit)))) (FreeGroup.hasMul.{u1} ι) (MulOneClass.toHasMul.{u1} (FreeProduct.{u1, 0} ι (fun (_x : ι) => FreeGroup.{0} Unit) (fun (i : ι) => DivInvMonoid.toMonoid.{0} (FreeGroup.{0} Unit) (Group.toDivInvMonoid.{0} (FreeGroup.{0} Unit) (FreeGroup.group.{0} Unit)))) (Monoid.toMulOneClass.{u1} (FreeProduct.{u1, 0} ι (fun (_x : ι) => FreeGroup.{0} Unit) (fun (i : ι) => DivInvMonoid.toMonoid.{0} (FreeGroup.{0} Unit) (Group.toDivInvMonoid.{0} (FreeGroup.{0} Unit) (FreeGroup.group.{0} Unit)))) (FreeProduct.monoid.{u1, 0} ι (fun (_x : ι) => FreeGroup.{0} Unit) (fun (i : ι) => DivInvMonoid.toMonoid.{0} (FreeGroup.{0} Unit) (Group.toDivInvMonoid.{0} (FreeGroup.{0} Unit) (FreeGroup.group.{0} Unit))))))
 but is expected to have type
-  forall {ι : Type.{u1}}, MulEquiv.{u1, u1} (FreeGroup.{u1} ι) (FreeProduct.{u1, 0} ι (fun (_x : ι) => FreeGroup.{0} Unit) (fun (i : ι) => DivInvMonoid.toMonoid.{0} ((fun (x._@.Mathlib.GroupTheory.FreeProduct._hyg.10100 : ι) => FreeGroup.{0} Unit) i) (Group.toDivInvMonoid.{0} ((fun (x._@.Mathlib.GroupTheory.FreeProduct._hyg.10100 : ι) => FreeGroup.{0} Unit) i) (FreeGroup.instGroupFreeGroup.{0} Unit)))) (FreeGroup.instMulFreeGroup.{u1} ι) (MulOneClass.toMul.{u1} (FreeProduct.{u1, 0} ι (fun (_x : ι) => FreeGroup.{0} Unit) (fun (i : ι) => DivInvMonoid.toMonoid.{0} ((fun (x._@.Mathlib.GroupTheory.FreeProduct._hyg.10100 : ι) => FreeGroup.{0} Unit) i) (Group.toDivInvMonoid.{0} ((fun (x._@.Mathlib.GroupTheory.FreeProduct._hyg.10100 : ι) => FreeGroup.{0} Unit) i) (FreeGroup.instGroupFreeGroup.{0} Unit)))) (Monoid.toMulOneClass.{u1} (FreeProduct.{u1, 0} ι (fun (_x : ι) => FreeGroup.{0} Unit) (fun (i : ι) => DivInvMonoid.toMonoid.{0} ((fun (x._@.Mathlib.GroupTheory.FreeProduct._hyg.10100 : ι) => FreeGroup.{0} Unit) i) (Group.toDivInvMonoid.{0} ((fun (x._@.Mathlib.GroupTheory.FreeProduct._hyg.10100 : ι) => FreeGroup.{0} Unit) i) (FreeGroup.instGroupFreeGroup.{0} Unit)))) (instMonoidFreeProduct.{u1, 0} ι (fun (_x : ι) => FreeGroup.{0} Unit) (fun (i : ι) => DivInvMonoid.toMonoid.{0} ((fun (x._@.Mathlib.GroupTheory.FreeProduct._hyg.10100 : ι) => FreeGroup.{0} Unit) i) (Group.toDivInvMonoid.{0} ((fun (x._@.Mathlib.GroupTheory.FreeProduct._hyg.10100 : ι) => FreeGroup.{0} Unit) i) (FreeGroup.instGroupFreeGroup.{0} Unit))))))
+  forall {ι : Type.{u1}}, MulEquiv.{u1, u1} (FreeGroup.{u1} ι) (FreeProduct.{u1, 0} ι (fun (_x : ι) => FreeGroup.{0} Unit) (fun (i : ι) => DivInvMonoid.toMonoid.{0} ((fun (x._@.Mathlib.GroupTheory.FreeProduct._hyg.10093 : ι) => FreeGroup.{0} Unit) i) (Group.toDivInvMonoid.{0} ((fun (x._@.Mathlib.GroupTheory.FreeProduct._hyg.10093 : ι) => FreeGroup.{0} Unit) i) (FreeGroup.instGroupFreeGroup.{0} Unit)))) (FreeGroup.instMulFreeGroup.{u1} ι) (MulOneClass.toMul.{u1} (FreeProduct.{u1, 0} ι (fun (_x : ι) => FreeGroup.{0} Unit) (fun (i : ι) => DivInvMonoid.toMonoid.{0} ((fun (x._@.Mathlib.GroupTheory.FreeProduct._hyg.10093 : ι) => FreeGroup.{0} Unit) i) (Group.toDivInvMonoid.{0} ((fun (x._@.Mathlib.GroupTheory.FreeProduct._hyg.10093 : ι) => FreeGroup.{0} Unit) i) (FreeGroup.instGroupFreeGroup.{0} Unit)))) (Monoid.toMulOneClass.{u1} (FreeProduct.{u1, 0} ι (fun (_x : ι) => FreeGroup.{0} Unit) (fun (i : ι) => DivInvMonoid.toMonoid.{0} ((fun (x._@.Mathlib.GroupTheory.FreeProduct._hyg.10093 : ι) => FreeGroup.{0} Unit) i) (Group.toDivInvMonoid.{0} ((fun (x._@.Mathlib.GroupTheory.FreeProduct._hyg.10093 : ι) => FreeGroup.{0} Unit) i) (FreeGroup.instGroupFreeGroup.{0} Unit)))) (instMonoidFreeProduct.{u1, 0} ι (fun (_x : ι) => FreeGroup.{0} Unit) (fun (i : ι) => DivInvMonoid.toMonoid.{0} ((fun (x._@.Mathlib.GroupTheory.FreeProduct._hyg.10093 : ι) => FreeGroup.{0} Unit) i) (Group.toDivInvMonoid.{0} ((fun (x._@.Mathlib.GroupTheory.FreeProduct._hyg.10093 : ι) => FreeGroup.{0} Unit) i) (FreeGroup.instGroupFreeGroup.{0} Unit))))))
 Case conversion may be inaccurate. Consider using '#align free_group_equiv_free_product freeGroupEquivFreeProductₓ'. -/
 -- NB: One might expect this theorem to be phrased with ℤ, but ℤ is an additive group,
 -- and using `multiplicative ℤ` runs into diamond issues.
Diff
@@ -428,7 +428,7 @@ private def mk_aux {l} (ls : List (Σi, M i)) (h1 : ∀ l' ∈ l::ls, Sigma.snd
 
 /- warning: free_product.word.cons_eq_rcons -> FreeProduct.Word.cons_eq_rcons is a dubious translation:
 lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] {i : ι} {m : M i} {ls : List.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))} {h1 : forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.Mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (List.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (List.hasMem.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)) -> (Ne.{succ u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Sigma.snd.{u1, u2} ι (fun (i : ι) => M i) l) (OfNat.ofNat.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (OfNat.mk.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (One.one.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (MulOneClass.toHasOne.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Monoid.toMulOneClass.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (_inst_1 (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l))))))))} {h2 : List.Chain'.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (fun (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)) (l' : Sigma.{u1, u2} ι (fun (i : ι) => M i)) => Ne.{succ u1} ι (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l) (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l')) (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)}, Eq.{max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mk.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls) h1 h2) (FreeProduct.Word.rcons.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i (FreeProduct.Word.Pair.mk.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) i m (_Private.1357938921.mkAux.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2) (Iff.mpr (Ne.{succ u1} (Option.{u1} ι) (FreeProduct.Word.fstIdx.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (_Private.1357938921.mkAux.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2)) (Option.some.{u1} ι i)) (forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.Mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Option.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Option.hasMem.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.head?.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (FreeProduct.Word.toList.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (_Private.1357938921.mkAux.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2)))) -> (Ne.{succ u1} ι i (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l))) (FreeProduct.Word.fstIdx_ne_iff.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (_Private.1357938921.mkAux.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2) i) (List.Chain'.rel_head?.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (fun (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)) (l' : Sigma.{u1, u2} ι (fun (i : ι) => M i)) => Ne.{succ u1} ι (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l) (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l')) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h2))))
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] {i : ι} {m : M i} {ls : List.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))} {h1 : forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.Mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (List.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (List.hasMem.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)) -> (Ne.{succ u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Sigma.snd.{u1, u2} ι (fun (i : ι) => M i) l) (OfNat.ofNat.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (OfNat.mk.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (One.one.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (MulOneClass.toHasOne.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Monoid.toMulOneClass.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (_inst_1 (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l))))))))} {h2 : List.Chain'.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (fun (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)) (l' : Sigma.{u1, u2} ι (fun (i : ι) => M i)) => Ne.{succ u1} ι (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l) (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l')) (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)}, Eq.{max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mk.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls) h1 h2) (FreeProduct.Word.rcons.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i (FreeProduct.Word.Pair.mk.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) i m (_Private.1265251317.mkAux.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2) (Iff.mpr (Ne.{succ u1} (Option.{u1} ι) (FreeProduct.Word.fstIdx.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (_Private.1265251317.mkAux.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2)) (Option.some.{u1} ι i)) (forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.Mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Option.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Option.hasMem.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.head?.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (FreeProduct.Word.toList.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (_Private.1265251317.mkAux.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2)))) -> (Ne.{succ u1} ι i (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l))) (FreeProduct.Word.fstIdx_ne_iff.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (_Private.1265251317.mkAux.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2) i) (List.Chain'.rel_head?.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (fun (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)) (l' : Sigma.{u1, u2} ι (fun (i : ι) => M i)) => Ne.{succ u1} ι (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l) (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l')) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h2))))
 but is expected to have type
   forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] {i : ι} {m : M i} {ls : List.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i))} {h1 : forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (List.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (List.instMembershipList.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.cons.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)) -> (Ne.{succ u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Sigma.snd.{u1, u2} ι (fun (i : ι) => M i) l) (OfNat.ofNat.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (One.toOfNat1.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Monoid.toOne.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (_inst_1 (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l))))))} {h2 : List.Chain'.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (fun (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)) (l' : Sigma.{u1, u2} ι (fun (i : ι) => M i)) => Ne.{succ u1} ι (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l) (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l')) (List.cons.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)}, Eq.{max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mk.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (List.cons.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls) h1 h2) (FreeProduct.Word.rcons.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i (FreeProduct.Word.Pair.mk.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i m (_private.Mathlib.GroupTheory.FreeProduct.0.FreeProduct.Word.mkAux.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2) (Iff.mpr (Ne.{succ u1} (Option.{u1} ι) (FreeProduct.Word.fstIdx.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (_private.Mathlib.GroupTheory.FreeProduct.0.FreeProduct.Word.mkAux.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2)) (Option.some.{u1} ι i)) (forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Option.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Option.instMembershipOption.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.head?.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (FreeProduct.Word.toList.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (_private.Mathlib.GroupTheory.FreeProduct.0.FreeProduct.Word.mkAux.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2)))) -> (Ne.{succ u1} ι i (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l))) (FreeProduct.Word.fstIdx_ne_iff.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (_private.Mathlib.GroupTheory.FreeProduct.0.FreeProduct.Word.mkAux.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2) i) (List.Chain'.rel_head?.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (fun (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)) (l' : Sigma.{u1, u2} ι (fun (i : ι) => M i)) => Ne.{succ u1} ι (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l) (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l')) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h2))))
 Case conversion may be inaccurate. Consider using '#align free_product.word.cons_eq_rcons FreeProduct.Word.cons_eq_rconsₓ'. -/
@@ -560,7 +560,7 @@ theorem of_smul_def (i) (w : Word M) (m : M i) :
 
 /- warning: free_product.word.cons_eq_smul -> FreeProduct.Word.cons_eq_smul is a dubious translation:
 lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] [_inst_4 : DecidableEq.{succ u1} ι] {i : ι} {m : M i} {ls : List.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))} {h1 : forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.Mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (List.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (List.hasMem.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)) -> (Ne.{succ u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Sigma.snd.{u1, u2} ι (fun (i : ι) => M i) l) (OfNat.ofNat.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (OfNat.mk.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (One.one.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (MulOneClass.toHasOne.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Monoid.toMulOneClass.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (_inst_1 (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l))))))))} {h2 : List.Chain'.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (fun (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)) (l' : Sigma.{u1, u2} ι (fun (i : ι) => M i)) => Ne.{succ u1} ι (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l) (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l')) (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)}, Eq.{max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mk.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls) h1 h2) (SMul.smul.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i)) (MulAction.toHasSmul.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mulAction.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b))) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m) (_Private.1357938921.mkAux.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2))
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] [_inst_4 : DecidableEq.{succ u1} ι] {i : ι} {m : M i} {ls : List.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))} {h1 : forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.Mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (List.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (List.hasMem.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)) -> (Ne.{succ u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Sigma.snd.{u1, u2} ι (fun (i : ι) => M i) l) (OfNat.ofNat.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (OfNat.mk.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (One.one.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (MulOneClass.toHasOne.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Monoid.toMulOneClass.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (_inst_1 (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l))))))))} {h2 : List.Chain'.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (fun (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)) (l' : Sigma.{u1, u2} ι (fun (i : ι) => M i)) => Ne.{succ u1} ι (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l) (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l')) (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)}, Eq.{max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mk.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls) h1 h2) (SMul.smul.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i)) (MulAction.toHasSmul.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mulAction.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b))) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m) (_Private.1265251317.mkAux.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2))
 but is expected to have type
   forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] [_inst_4 : DecidableEq.{succ u1} ι] {i : ι} {m : M i} {ls : List.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i))} {h1 : forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (List.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (List.instMembershipList.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.cons.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)) -> (Ne.{succ u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Sigma.snd.{u1, u2} ι (fun (i : ι) => M i) l) (OfNat.ofNat.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (One.toOfNat1.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Monoid.toOne.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (_inst_1 (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l))))))} {h2 : List.Chain'.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (fun (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)) (l' : Sigma.{u1, u2} ι (fun (i : ι) => M i)) => Ne.{succ u1} ι (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l) (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l')) (List.cons.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)}, Eq.{max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mk.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (List.cons.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls) h1 h2) (HSMul.hSMul.{max u1 u2, max u2 u1, max u1 u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instHSMul.{max u1 u2, max u1 u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (MulAction.toSMul.{max u1 u2, max u1 u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.instMulActionFreeProductWordInstMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, max (succ u2) (succ u1)} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m) (_private.Mathlib.GroupTheory.FreeProduct.0.FreeProduct.Word.mkAux.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2))
 Case conversion may be inaccurate. Consider using '#align free_product.word.cons_eq_smul FreeProduct.Word.cons_eq_smulₓ'. -/
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: David Wärn, Joachim Breitner
 
 ! This file was ported from Lean 3 source module group_theory.free_product
-! leanprover-community/mathlib commit 9114ddffa023340c9ec86965e00cdd6fe26fcdf6
+! leanprover-community/mathlib commit cb3ceec8485239a61ed51d944cb9a95b68c6bafc
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -18,6 +18,9 @@ import Mathbin.Data.Set.Pointwise.Smul
 /-!
 # The free product of groups or monoids
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 Given an `ι`-indexed family `M` of monoids, we define their free product (categorical coproduct)
 `free_product M`. When `ι` and all `M i` have decidable equality, the free product bijects with the
 type `word M` of reduced words. This bijection is constructed by defining an action of
@@ -425,7 +428,7 @@ private def mk_aux {l} (ls : List (Σi, M i)) (h1 : ∀ l' ∈ l::ls, Sigma.snd
 
 /- warning: free_product.word.cons_eq_rcons -> FreeProduct.Word.cons_eq_rcons is a dubious translation:
 lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] {i : ι} {m : M i} {ls : List.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))} {h1 : forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.Mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (List.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (List.hasMem.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)) -> (Ne.{succ u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Sigma.snd.{u1, u2} ι (fun (i : ι) => M i) l) (OfNat.ofNat.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (OfNat.mk.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (One.one.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (MulOneClass.toHasOne.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Monoid.toMulOneClass.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (_inst_1 (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l))))))))} {h2 : List.Chain'.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (fun (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)) (l' : Sigma.{u1, u2} ι (fun (i : ι) => M i)) => Ne.{succ u1} ι (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l) (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l')) (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)}, Eq.{max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mk.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls) h1 h2) (FreeProduct.Word.rcons.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i (FreeProduct.Word.Pair.mk.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) i m (_Private.1252409595.mkAux.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2) (Iff.mpr (Ne.{succ u1} (Option.{u1} ι) (FreeProduct.Word.fstIdx.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (_Private.1252409595.mkAux.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2)) (Option.some.{u1} ι i)) (forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.Mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Option.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Option.hasMem.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.head?.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (FreeProduct.Word.toList.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (_Private.1252409595.mkAux.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2)))) -> (Ne.{succ u1} ι i (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l))) (FreeProduct.Word.fstIdx_ne_iff.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (_Private.1252409595.mkAux.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2) i) (List.Chain'.rel_head?.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (fun (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)) (l' : Sigma.{u1, u2} ι (fun (i : ι) => M i)) => Ne.{succ u1} ι (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l) (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l')) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h2))))
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] {i : ι} {m : M i} {ls : List.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))} {h1 : forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.Mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (List.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (List.hasMem.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)) -> (Ne.{succ u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Sigma.snd.{u1, u2} ι (fun (i : ι) => M i) l) (OfNat.ofNat.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (OfNat.mk.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (One.one.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (MulOneClass.toHasOne.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Monoid.toMulOneClass.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (_inst_1 (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l))))))))} {h2 : List.Chain'.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (fun (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)) (l' : Sigma.{u1, u2} ι (fun (i : ι) => M i)) => Ne.{succ u1} ι (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l) (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l')) (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)}, Eq.{max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mk.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls) h1 h2) (FreeProduct.Word.rcons.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i (FreeProduct.Word.Pair.mk.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) i m (_Private.1357938921.mkAux.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2) (Iff.mpr (Ne.{succ u1} (Option.{u1} ι) (FreeProduct.Word.fstIdx.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (_Private.1357938921.mkAux.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2)) (Option.some.{u1} ι i)) (forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.Mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Option.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Option.hasMem.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.head?.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (FreeProduct.Word.toList.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (_Private.1357938921.mkAux.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2)))) -> (Ne.{succ u1} ι i (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l))) (FreeProduct.Word.fstIdx_ne_iff.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (_Private.1357938921.mkAux.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2) i) (List.Chain'.rel_head?.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (fun (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)) (l' : Sigma.{u1, u2} ι (fun (i : ι) => M i)) => Ne.{succ u1} ι (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l) (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l')) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h2))))
 but is expected to have type
   forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] {i : ι} {m : M i} {ls : List.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i))} {h1 : forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (List.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (List.instMembershipList.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.cons.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)) -> (Ne.{succ u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Sigma.snd.{u1, u2} ι (fun (i : ι) => M i) l) (OfNat.ofNat.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (One.toOfNat1.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Monoid.toOne.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (_inst_1 (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l))))))} {h2 : List.Chain'.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (fun (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)) (l' : Sigma.{u1, u2} ι (fun (i : ι) => M i)) => Ne.{succ u1} ι (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l) (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l')) (List.cons.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)}, Eq.{max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mk.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (List.cons.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls) h1 h2) (FreeProduct.Word.rcons.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i (FreeProduct.Word.Pair.mk.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i m (_private.Mathlib.GroupTheory.FreeProduct.0.FreeProduct.Word.mkAux.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2) (Iff.mpr (Ne.{succ u1} (Option.{u1} ι) (FreeProduct.Word.fstIdx.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (_private.Mathlib.GroupTheory.FreeProduct.0.FreeProduct.Word.mkAux.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2)) (Option.some.{u1} ι i)) (forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Option.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Option.instMembershipOption.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.head?.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (FreeProduct.Word.toList.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (_private.Mathlib.GroupTheory.FreeProduct.0.FreeProduct.Word.mkAux.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2)))) -> (Ne.{succ u1} ι i (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l))) (FreeProduct.Word.fstIdx_ne_iff.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (_private.Mathlib.GroupTheory.FreeProduct.0.FreeProduct.Word.mkAux.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2) i) (List.Chain'.rel_head?.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (fun (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)) (l' : Sigma.{u1, u2} ι (fun (i : ι) => M i)) => Ne.{succ u1} ι (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l) (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l')) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h2))))
 Case conversion may be inaccurate. Consider using '#align free_product.word.cons_eq_rcons FreeProduct.Word.cons_eq_rconsₓ'. -/
@@ -557,7 +560,7 @@ theorem of_smul_def (i) (w : Word M) (m : M i) :
 
 /- warning: free_product.word.cons_eq_smul -> FreeProduct.Word.cons_eq_smul is a dubious translation:
 lean 3 declaration is
-  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] [_inst_4 : DecidableEq.{succ u1} ι] {i : ι} {m : M i} {ls : List.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))} {h1 : forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.Mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (List.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (List.hasMem.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)) -> (Ne.{succ u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Sigma.snd.{u1, u2} ι (fun (i : ι) => M i) l) (OfNat.ofNat.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (OfNat.mk.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (One.one.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (MulOneClass.toHasOne.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Monoid.toMulOneClass.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (_inst_1 (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l))))))))} {h2 : List.Chain'.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (fun (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)) (l' : Sigma.{u1, u2} ι (fun (i : ι) => M i)) => Ne.{succ u1} ι (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l) (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l')) (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)}, Eq.{max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mk.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls) h1 h2) (SMul.smul.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i)) (MulAction.toHasSmul.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mulAction.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b))) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m) (_Private.1252409595.mkAux.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2))
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] [_inst_4 : DecidableEq.{succ u1} ι] {i : ι} {m : M i} {ls : List.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))} {h1 : forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.Mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (List.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (List.hasMem.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)) -> (Ne.{succ u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Sigma.snd.{u1, u2} ι (fun (i : ι) => M i) l) (OfNat.ofNat.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (OfNat.mk.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (One.one.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (MulOneClass.toHasOne.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Monoid.toMulOneClass.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (_inst_1 (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l))))))))} {h2 : List.Chain'.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (fun (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)) (l' : Sigma.{u1, u2} ι (fun (i : ι) => M i)) => Ne.{succ u1} ι (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l) (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l')) (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)}, Eq.{max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mk.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls) h1 h2) (SMul.smul.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i)) (MulAction.toHasSmul.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mulAction.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b))) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m) (_Private.1357938921.mkAux.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2))
 but is expected to have type
   forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] [_inst_4 : DecidableEq.{succ u1} ι] {i : ι} {m : M i} {ls : List.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i))} {h1 : forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (List.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (List.instMembershipList.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.cons.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)) -> (Ne.{succ u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Sigma.snd.{u1, u2} ι (fun (i : ι) => M i) l) (OfNat.ofNat.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (One.toOfNat1.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Monoid.toOne.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (_inst_1 (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l))))))} {h2 : List.Chain'.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (fun (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)) (l' : Sigma.{u1, u2} ι (fun (i : ι) => M i)) => Ne.{succ u1} ι (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l) (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l')) (List.cons.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)}, Eq.{max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mk.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (List.cons.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls) h1 h2) (HSMul.hSMul.{max u1 u2, max u2 u1, max u1 u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instHSMul.{max u1 u2, max u1 u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (MulAction.toSMul.{max u1 u2, max u1 u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.instMulActionFreeProductWordInstMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, max (succ u2) (succ u1)} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m) (_private.Mathlib.GroupTheory.FreeProduct.0.FreeProduct.Word.mkAux.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2))
 Case conversion may be inaccurate. Consider using '#align free_product.word.cons_eq_smul FreeProduct.Word.cons_eq_smulₓ'. -/
Diff
@@ -272,7 +272,7 @@ instance : Inv (FreeProduct G)
 lean 3 declaration is
   forall {ι : Type.{u1}} (G : ι -> Type.{u2}) [_inst_3 : forall (i : ι), Group.{u2} (G i)] (x : FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))), Eq.{succ (max u1 u2)} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Inv.inv.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.hasInv.{u1, u2} ι G (fun (i : ι) => _inst_3 i)) x) (MulOpposite.unop.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (coeFn.{succ (max u1 u2), succ (max u1 u2)} (MonoidHom.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))))) (fun (_x : MonoidHom.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))))) => (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) -> (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))) (MonoidHom.hasCoeToFun.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))))) (coeFn.{max 1 (max (max (succ u1) (succ (max u1 u2)) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ (max u1 u2)) (succ u2), max (max (succ u1) (succ (max u1 u2)) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ (max u1 u2)) (succ u2), succ (max u1 u2)} (forall (i : ι), MonoidHom.{u2, max u1 u2} (G i) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))))) (MonoidHom.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))))) (fun (_x : Equiv.{max (succ u1) (succ (max u1 u2)) (succ u2), succ (max u1 u2)} (forall (i : ι), MonoidHom.{u2, max u1 u2} (G i) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))))) (MonoidHom.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))))) => (forall (i : ι), MonoidHom.{u2, max u1 u2} (G i) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))))) -> (MonoidHom.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))))) (Equiv.hasCoeToFun.{max (succ u1) (succ (max u1 u2)) (succ u2), succ (max u1 u2)} (forall (i : ι), MonoidHom.{u2, max u1 u2} (G i) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))))) (MonoidHom.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))))) (FreeProduct.lift.{u1, u2, max u1 u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))) (fun (i : ι) => MonoidHom.comp.{u2, u2, max u1 u2} (G i) (MulOpposite.{u2} (G i)) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u2} (G i) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))) (coeFn.{max 1 (succ (max u1 u2)) (succ u2), max (succ (max u1 u2)) (succ u2)} (Equiv.{max (succ (max u1 u2)) (succ u2), max (succ (max u1 u2)) (succ u2)} (MonoidHom.{u2, max u1 u2} (G i) (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))) (MonoidHom.{u2, max u1 u2} (MulOpposite.{u2} (G i)) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u2} (G i) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))))) (fun (_x : Equiv.{max (succ (max u1 u2)) (succ u2), max (succ (max u1 u2)) (succ u2)} (MonoidHom.{u2, max u1 u2} (G i) (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))) (MonoidHom.{u2, max u1 u2} (MulOpposite.{u2} (G i)) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u2} (G i) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))))) => (MonoidHom.{u2, max u1 u2} (G i) (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))) -> (MonoidHom.{u2, max u1 u2} (MulOpposite.{u2} (G i)) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u2} (G i) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))))) (Equiv.hasCoeToFun.{max (succ (max u1 u2)) (succ u2), max (succ (max u1 u2)) (succ u2)} (MonoidHom.{u2, max u1 u2} (G i) (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))) (MonoidHom.{u2, max u1 u2} (MulOpposite.{u2} (G i)) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u2} (G i) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))))) (MonoidHom.op.{u2, max u1 u2} (G i) (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))) (FreeProduct.of.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) i)) (MulEquiv.toMonoidHom.{u2, u2} (G i) (MulOpposite.{u2} (G i)) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u2} (G i) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulEquiv.inv'.{u2} (G i) (Group.toDivisionMonoid.{u2} (G i) (_inst_3 i)))))) x))
 but is expected to have type
-  forall {ι : Type.{u2}} (G : ι -> Type.{u1}) [_inst_3 : forall (i : ι), Group.{u1} (G i)] (x : FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))), Eq.{max (succ u2) (succ u1)} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Inv.inv.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (FreeProduct.instInvFreeProductToMonoidToDivInvMonoid.{u2, u1} ι G (fun (i : ι) => _inst_3 i)) x) (MulOpposite.unop.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) => MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (fun (i : ι) => MonoidHom.comp.{u1, u1, max u2 u1} (G i) (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FunLike.coe.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (Equiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (fun (a : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) a) (Equiv.instFunLikeEquiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.op.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.of.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i)) (MulEquiv.toMonoidHom.{u1, u1} (G i) (MulOpposite.{u1} (G i)) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulEquiv.inv'.{u1} (G i) (Group.toDivisionMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (fun (_x : FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) => MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) => MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (fun (i : ι) => MonoidHom.comp.{u1, u1, max u2 u1} (G i) (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FunLike.coe.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (Equiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (fun (a : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) a) (Equiv.instFunLikeEquiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.op.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.of.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i)) (MulEquiv.toMonoidHom.{u1, u1} (G i) (MulOpposite.{u1} (G i)) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulEquiv.inv'.{u1} (G i) (Group.toDivisionMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MulOneClass.toMul.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (MonoidHomClass.toMulHomClass.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) => MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (fun (i : ι) => MonoidHom.comp.{u1, u1, max u2 u1} (G i) (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FunLike.coe.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (Equiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (fun (a : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) a) (Equiv.instFunLikeEquiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.op.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.of.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i)) (MulEquiv.toMonoidHom.{u1, u1} (G i) (MulOpposite.{u1} (G i)) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulEquiv.inv'.{u1} (G i) (Group.toDivisionMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.monoidHomClass.{max u2 u1, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))))) (FunLike.coe.{max (max (succ (max u2 u1)) (succ u1)) (succ u2), max (max (succ (max u2 u1)) (succ u1)) (succ u2), max (max (succ (max u2 u1)) (succ u1)) (succ u2)} (Equiv.{max (max (succ u2) (succ u1)) (succ (max u2 u1)), max (succ (max u2 u1)) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (fun (_x : forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) => MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) _x) (Equiv.instFunLikeEquiv.{max (max (succ (max u2 u1)) (succ u1)) (succ u2), max (max (succ (max u2 u1)) (succ u1)) (succ u2)} (forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (FreeProduct.lift.{u2, u1, max u2 u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (fun (i : ι) => MonoidHom.comp.{u1, u1, max u2 u1} (G i) (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FunLike.coe.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (Equiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (fun (_x : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) _x) (Equiv.instFunLikeEquiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.op.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.of.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i)) (MulEquiv.toMonoidHom.{u1, u1} (G i) (MulOpposite.{u1} (G i)) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulEquiv.inv'.{u1} (G i) (Group.toDivisionMonoid.{u1} (G i) (_inst_3 i)))))) x))
+  forall {ι : Type.{u2}} (G : ι -> Type.{u1}) [_inst_3 : forall (i : ι), Group.{u1} (G i)] (x : FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))), Eq.{max (succ u2) (succ u1)} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Inv.inv.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (FreeProduct.instInvFreeProductToMonoidToDivInvMonoid.{u2, u1} ι G (fun (i : ι) => _inst_3 i)) x) (MulOpposite.unop.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) => MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (fun (i : ι) => MonoidHom.comp.{u1, u1, max u2 u1} (G i) (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FunLike.coe.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (Equiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (fun (a : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) a) (Equiv.instFunLikeEquiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.op.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.of.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i)) (MulEquiv.toMonoidHom.{u1, u1} (G i) (MulOpposite.{u1} (G i)) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulEquiv.inv'.{u1} (G i) (Group.toDivisionMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (fun (_x : FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) => MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) => MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (fun (i : ι) => MonoidHom.comp.{u1, u1, max u2 u1} (G i) (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FunLike.coe.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (Equiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (fun (a : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) a) (Equiv.instFunLikeEquiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.op.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.of.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i)) (MulEquiv.toMonoidHom.{u1, u1} (G i) (MulOpposite.{u1} (G i)) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulEquiv.inv'.{u1} (G i) (Group.toDivisionMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MulOneClass.toMul.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (MonoidHomClass.toMulHomClass.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) => MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (fun (i : ι) => MonoidHom.comp.{u1, u1, max u2 u1} (G i) (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FunLike.coe.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (Equiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (fun (a : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) a) (Equiv.instFunLikeEquiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.op.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.of.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i)) (MulEquiv.toMonoidHom.{u1, u1} (G i) (MulOpposite.{u1} (G i)) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulEquiv.inv'.{u1} (G i) (Group.toDivisionMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.monoidHomClass.{max u2 u1, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))))) (FunLike.coe.{max (max (succ (max u2 u1)) (succ u1)) (succ u2), max (max (succ (max u2 u1)) (succ u1)) (succ u2), max (max (succ (max u2 u1)) (succ u1)) (succ u2)} (Equiv.{max (max (succ u2) (succ u1)) (succ (max u2 u1)), max (succ (max u2 u1)) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (fun (_x : forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) => MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) _x) (Equiv.instFunLikeEquiv.{max (max (succ (max u2 u1)) (succ u1)) (succ u2), max (max (succ (max u2 u1)) (succ u1)) (succ u2)} (forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (FreeProduct.lift.{u2, u1, max u2 u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (fun (i : ι) => MonoidHom.comp.{u1, u1, max u2 u1} (G i) (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FunLike.coe.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (Equiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (fun (_x : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) _x) (Equiv.instFunLikeEquiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.op.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.of.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i)) (MulEquiv.toMonoidHom.{u1, u1} (G i) (MulOpposite.{u1} (G i)) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulEquiv.inv'.{u1} (G i) (Group.toDivisionMonoid.{u1} (G i) (_inst_3 i)))))) x))
 Case conversion may be inaccurate. Consider using '#align free_product.inv_def FreeProduct.inv_defₓ'. -/
 theorem inv_def (x : FreeProduct G) :
     x⁻¹ =
Diff
@@ -74,6 +74,7 @@ open Set
 
 variable {ι : Type _} (M : ∀ i : ι, Type _) [∀ i, Monoid (M i)]
 
+#print FreeProduct.Rel /-
 /-- A relation on the free monoid on alphabet `Σ i, M i`, relating `⟨i, 1⟩` with `1` and
 `⟨i, x⟩ * ⟨i, y⟩` with `⟨i, x * y⟩`. -/
 inductive FreeProduct.Rel : FreeMonoid (Σi, M i) → FreeMonoid (Σi, M i) → Prop
@@ -82,14 +83,18 @@ inductive FreeProduct.Rel : FreeMonoid (Σi, M i) → FreeMonoid (Σi, M i) →
   of_mul {i : ι} (x y : M i) :
     FreeProduct.Rel (FreeMonoid.of ⟨i, x⟩ * FreeMonoid.of ⟨i, y⟩) (FreeMonoid.of ⟨i, x * y⟩)
 #align free_product.rel FreeProduct.Rel
+-/
 
+#print FreeProduct /-
 /-- The free product (categorical coproduct) of an indexed family of monoids. -/
 def FreeProduct : Type _ :=
   (conGen (FreeProduct.Rel M)).Quotient deriving Monoid, Inhabited
 #align free_product FreeProduct
+-/
 
 namespace FreeProduct
 
+#print FreeProduct.Word /-
 /-- The type of reduced words. A reduced word cannot contain a letter `1`, and no two adjacent
 letters can come from the same summand. -/
 @[ext]
@@ -98,9 +103,16 @@ structure Word where
   ne_one : ∀ l ∈ to_list, Sigma.snd l ≠ 1
   chain_ne : to_list.Chain' fun l l' => Sigma.fst l ≠ Sigma.fst l'
 #align free_product.word FreeProduct.Word
+-/
 
 variable {M}
 
+/- warning: free_product.of -> FreeProduct.of is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι}, MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))
+but is expected to have type
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι}, MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))
+Case conversion may be inaccurate. Consider using '#align free_product.of FreeProduct.ofₓ'. -/
 /-- The inclusion of a summand into the free product. -/
 def of {i : ι} : M i →* FreeProduct M
     where
@@ -109,12 +121,24 @@ def of {i : ι} : M i →* FreeProduct M
   map_mul' x y := Eq.symm <| (Con.eq _).mpr (ConGen.Rel.of _ _ (FreeProduct.Rel.of_mul x y))
 #align free_product.of FreeProduct.of
 
+/- warning: free_product.of_apply -> FreeProduct.of_apply is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} (m : M i), Eq.{succ (max u1 u2)} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m) (coeFn.{succ (max u1 u2), succ (max u1 u2)} (MonoidHom.{max u1 u2, max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))))))) (conGen.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u1, u2} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i)))))) (Con.mulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i)))))) (conGen.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u1, u2} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i))))) (fun (_x : MonoidHom.{max u1 u2, max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))))))) (conGen.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u1, u2} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i)))))) (Con.mulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i)))))) (conGen.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u1, u2} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i))))) => (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) -> (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))))))) (conGen.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u1, u2} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i))))) (MonoidHom.hasCoeToFun.{max u1 u2, max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))))))) (conGen.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u1, u2} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i)))))) (Con.mulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i)))))) (conGen.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u1, u2} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i))))) (Con.mk'.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i)))))) (conGen.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (MulOneClass.toHasMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (FreeMonoid.cancelMonoid.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u1, u2} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (FreeMonoid.of.{max u1 u2} (Sigma.{u1, u2} ι (fun {i : ι} => M i)) (Sigma.mk.{u1, u2} ι (fun {i : ι} => M i) i m)))
+but is expected to have type
+  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] {i : ι} (m : M i), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) m) (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) m) (FunLike.coe.{succ (max u1 u2), succ (max u1 u2), succ (max u1 u2)} (MonoidHom.{max u1 u2, max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (Con.mulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i))))) (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (fun (_x : FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) => Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) _x) (MulHomClass.toFunLike.{max u1 u2, max u1 u2, max u1 u2} (MonoidHom.{max u1 u2, max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (Con.mulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i))))) (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (MulOneClass.toMul.{max u1 u2} (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (Con.mulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i))))) (MonoidHomClass.toMulHomClass.{max u1 u2, max u1 u2, max u1 u2} (MonoidHom.{max u1 u2, max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (Con.mulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i))))) (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (Con.mulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (MonoidHom.monoidHomClass.{max u1 u2, max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Con.Quotient.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (MulOneClass.toMul.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M)))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (Con.mulOneClass.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i))))))) (Con.mk'.{max u1 u2} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι M)) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι M))))) (conGen.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (MulOneClass.toMul.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Monoid.toMulOneClass.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (RightCancelMonoid.toMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (CancelMonoid.toRightCancelMonoid.{max u2 u1} (FreeMonoid.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeMonoid.instCancelMonoidFreeMonoid.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))))))) (FreeProduct.Rel.{u2, u1} ι M (fun (i : ι) => (fun (i : ι) => _inst_1 i) i)))) (FreeMonoid.of.{max u1 u2} (Sigma.{u2, u1} ι M) (Sigma.mk.{u2, u1} ι M i m)))
+Case conversion may be inaccurate. Consider using '#align free_product.of_apply FreeProduct.of_applyₓ'. -/
 theorem of_apply {i} (m : M i) : of m = Con.mk' _ (FreeMonoid.of <| Sigma.mk i m) :=
   rfl
 #align free_product.of_apply FreeProduct.of_apply
 
 variable {N : Type _} [Monoid N]
 
+/- warning: free_product.ext_hom -> FreeProduct.ext_hom is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {N : Type.{u3}} [_inst_2 : Monoid.{u3} N] (f : MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_2)) (g : MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_2)), (forall (i : ι), Eq.{max (succ u3) (succ u2)} (MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_2)) (MonoidHom.comp.{u2, max u1 u2, u3} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_2) f (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (MonoidHom.comp.{u2, max u1 u2, u3} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_2) g (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i))) -> (Eq.{max (succ u3) (succ (max u1 u2))} (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_2)) f g)
+but is expected to have type
+  forall {ι : Type.{u2}} {M : ι -> Type.{u3}} [_inst_1 : forall (i : ι), Monoid.{u3} (M i)] {N : Type.{u1}} [_inst_2 : Monoid.{u1} N] (f : MonoidHom.{max u3 u2, u1} (FreeProduct.{u2, u3} ι M (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u2 u3} (FreeProduct.{u2, u3} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u3} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} N _inst_2)) (g : MonoidHom.{max u3 u2, u1} (FreeProduct.{u2, u3} ι M (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u2 u3} (FreeProduct.{u2, u3} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u3} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} N _inst_2)), (forall (i : ι), Eq.{max (succ u3) (succ u1)} (MonoidHom.{u3, u1} (M i) N (Monoid.toMulOneClass.{u3} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u1} N _inst_2)) (MonoidHom.comp.{u3, max u2 u3, u1} (M i) (FreeProduct.{u2, u3} ι M (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{u3} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u3} (FreeProduct.{u2, u3} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u3} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} N _inst_2) f (FreeProduct.of.{u2, u3} ι M (fun (i : ι) => _inst_1 i) i)) (MonoidHom.comp.{u3, max u2 u3, u1} (M i) (FreeProduct.{u2, u3} ι M (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{u3} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u3} (FreeProduct.{u2, u3} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u3} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} N _inst_2) g (FreeProduct.of.{u2, u3} ι M (fun (i : ι) => _inst_1 i) i))) -> (Eq.{max (max (succ u2) (succ u3)) (succ u1)} (MonoidHom.{max u3 u2, u1} (FreeProduct.{u2, u3} ι M (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u2 u3} (FreeProduct.{u2, u3} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u3} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} N _inst_2)) f g)
+Case conversion may be inaccurate. Consider using '#align free_product.ext_hom FreeProduct.ext_homₓ'. -/
 /-- See note [partially-applied ext lemmas]. -/
 @[ext]
 theorem ext_hom (f g : FreeProduct M →* N) (h : ∀ i, f.comp (of : M i →* _) = g.comp of) : f = g :=
@@ -124,6 +148,12 @@ theorem ext_hom (f g : FreeProduct M →* N) (h : ∀ i, f.comp (of : M i →* _
         MonoidHom.comp_apply, h]
 #align free_product.ext_hom FreeProduct.ext_hom
 
+/- warning: free_product.lift -> FreeProduct.lift is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {N : Type.{u3}} [_inst_2 : Monoid.{u3} N], Equiv.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_2)) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_2))
+but is expected to have type
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {N : Type.{u3}} [_inst_2 : Monoid.{u3} N], Equiv.{max (max (succ u1) (succ u2)) (succ u3), max (succ u3) (succ (max u2 u1))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_2)) (MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_2))
+Case conversion may be inaccurate. Consider using '#align free_product.lift FreeProduct.liftₓ'. -/
 /-- A map out of the free product corresponds to a family of maps out of the summands. This is the
 universal property of the free product, charaterizing it as a categorical coproduct. -/
 @[simps symm_apply]
@@ -152,11 +182,23 @@ def lift : (∀ i, M i →* N) ≃ (FreeProduct M →* N)
     simp only [MonoidHom.comp_apply, of_apply, Con.lift_mk', FreeMonoid.lift_eval_of]
 #align free_product.lift FreeProduct.lift
 
+/- warning: free_product.lift_of -> FreeProduct.lift_of is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {N : Type.{u3}} [_inst_3 : Monoid.{u3} N] (fi : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) {i : ι} (m : M i), Eq.{succ u3} N (coeFn.{max (succ u3) (succ (max u1 u2)), max (succ (max u1 u2)) (succ u3)} (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) (fun (_x : MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) => (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) -> N) (MonoidHom.hasCoeToFun.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) (coeFn.{max 1 (max (max (succ u1) (succ u3) (succ u2)) (succ u3) (succ (max u1 u2))) (max (succ u3) (succ (max u1 u2))) (succ u1) (succ u3) (succ u2), max (max (succ u1) (succ u3) (succ u2)) (succ u3) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (fun (_x : Equiv.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) => (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) -> (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (Equiv.hasCoeToFun.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (FreeProduct.lift.{u1, u2, u3} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i) N _inst_3) fi) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m)) (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (fun (_x : MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => (M i) -> N) (MonoidHom.hasCoeToFun.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (fi i) m)
+but is expected to have type
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {N : Type.{u3}} [_inst_3 : Monoid.{u3} N] (fi : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) {i : ι} (m : M i), Eq.{succ u3} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) => N) (FunLike.coe.{max (succ u2) (succ u1), succ u2, max (succ u2) (succ u1)} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (a : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) a) (MulHomClass.toFunLike.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m)) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (succ u1) (succ u2), succ u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) fi) (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (fun (_x : FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) => N) _x) (MulHomClass.toFunLike.{max (max u1 u2) u3, max u1 u2, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) fi) (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)))) (MulOneClass.toMul.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHomClass.toMulHomClass.{max (max u1 u2) u3, max u1 u2, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) fi) (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3) (MonoidHom.monoidHomClass.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)))) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1)} (Equiv.{max (max (succ u1) (succ u2)) (succ u3), max (succ u3) (succ (max u2 u1))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (fun (_x : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) _x) (Equiv.instFunLikeEquiv.{max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1)} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (FreeProduct.lift.{u1, u2, u3} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i) N _inst_3) fi) (FunLike.coe.{max (succ u2) (succ u1), succ u2, max (succ u2) (succ u1)} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m)) (FunLike.coe.{max (succ u2) (succ u3), succ u2, succ u3} (MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => N) _x) (MulHomClass.toFunLike.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (M i) N (MulOneClass.toMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MulOneClass.toMul.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u3, u2, u3} (MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3) (MonoidHom.monoidHomClass.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)))) (fi i) m)
+Case conversion may be inaccurate. Consider using '#align free_product.lift_of FreeProduct.lift_ofₓ'. -/
 @[simp]
 theorem lift_of {N} [Monoid N] (fi : ∀ i, M i →* N) {i} (m : M i) : lift fi (of m) = fi i m := by
   conv_rhs => rw [← lift.symm_apply_apply fi, lift_symm_apply, MonoidHom.comp_apply]
 #align free_product.lift_of FreeProduct.lift_of
 
+/- warning: free_product.induction_on -> FreeProduct.induction_on is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {C : (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) -> Prop} (m : FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)), (C (OfNat.ofNat.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) 1 (OfNat.mk.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) 1 (One.one.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toHasOne.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))))))) -> (forall (i : ι) (m : M i), C (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m)) -> (forall (x : FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (y : FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)), (C x) -> (C y) -> (C (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instHMul.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toHasMul.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i))))) x y))) -> (C m)
+but is expected to have type
+  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] {C : (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) -> Prop} (m : FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)), (C (OfNat.ofNat.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) 1 (One.toOfNat1.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toOne.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))) -> (forall (i : ι) (m : M i), C (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) m)) -> (forall (x : FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (y : FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)), (C x) -> (C y) -> (C (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instHMul.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))))) x y))) -> (C m)
+Case conversion may be inaccurate. Consider using '#align free_product.induction_on FreeProduct.induction_onₓ'. -/
 @[elab_as_elim]
 theorem induction_on {C : FreeProduct M → Prop} (m : FreeProduct M) (h_one : C 1)
     (h_of : ∀ (i) (m : M i), C (of m)) (h_mul : ∀ x y, C x → C y → C (x * y)) : C m :=
@@ -169,15 +211,33 @@ theorem induction_on {C : FreeProduct M → Prop} (m : FreeProduct M) (h_one : C
   simp [MonoidHom.codRestrict]
 #align free_product.induction_on FreeProduct.induction_on
 
+/- warning: free_product.of_left_inverse -> FreeProduct.of_leftInverse is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : DecidableEq.{succ u1} ι] (i : ι), Function.LeftInverse.{succ u2, succ (max u1 u2)} (M i) (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (coeFn.{max (succ u2) (succ (max u1 u2)), max (succ (max u1 u2)) (succ u2)} (MonoidHom.{max u1 u2, u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (fun (_x : MonoidHom.{max u1 u2, u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) => (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) -> (M i)) (MonoidHom.hasCoeToFun.{max u1 u2, u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ u2) (succ (max u1 u2))) (max (succ u2) (succ (max u1 u2))) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ u2) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ (max u1 u2))} (forall (i_1 : ι), MonoidHom.{u2, u2} (M i_1) (M i) (Monoid.toMulOneClass.{u2} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MonoidHom.{max u1 u2, u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)))) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u2) (succ (max u1 u2))} (forall (i_1 : ι), MonoidHom.{u2, u2} (M i_1) (M i) (Monoid.toMulOneClass.{u2} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MonoidHom.{max u1 u2, u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)))) => (forall (i_1 : ι), MonoidHom.{u2, u2} (M i_1) (M i) (Monoid.toMulOneClass.{u2} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) -> (MonoidHom.{max u1 u2, u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u2) (succ (max u1 u2))} (forall (i_1 : ι), MonoidHom.{u2, u2} (M i_1) (M i) (Monoid.toMulOneClass.{u2} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MonoidHom.{max u1 u2, u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)))) (FreeProduct.lift.{u1, u2, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i) (M i) (_inst_1 i)) (Pi.mulSingle.{u1, u2} ι (fun (i_1 : ι) => MonoidHom.{u2, u2} (M i_1) (M i) (Monoid.toMulOneClass.{u2} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (fun (a : ι) (b : ι) => _inst_3 a b) (fun (i_1 : ι) => MonoidHom.hasOne.{u2, u2} (M i_1) (M i) (Monoid.toMulOneClass.{u2} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) i (MonoidHom.id.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)))))) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i))
+but is expected to have type
+  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] [_inst_3 : DecidableEq.{succ u2} ι] (i : ι), Function.LeftInverse.{succ u1, max (succ u2) (succ u1)} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i_1 : ι), MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) => MonoidHom.{max u1 u2, u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (Pi.mulSingle.{u2, u1} ι (fun (i_1 : ι) => MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (fun (a : ι) (b : ι) => _inst_3 a b) (fun (i_1 : ι) => instOneMonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) i (MonoidHom.id.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))))) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (fun (_x : FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => M i) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i_1 : ι), MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) => MonoidHom.{max u1 u2, u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (Pi.mulSingle.{u2, u1} ι (fun (i_1 : ι) => MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (fun (a : ι) (b : ι) => _inst_3 a b) (fun (i_1 : ι) => instOneMonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) i (MonoidHom.id.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))))) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MonoidHomClass.toMulHomClass.{max u2 u1, max u2 u1, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i_1 : ι), MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) => MonoidHom.{max u1 u2, u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (Pi.mulSingle.{u2, u1} ι (fun (i_1 : ι) => MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (fun (a : ι) (b : ι) => _inst_3 a b) (fun (i_1 : ι) => instOneMonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) i (MonoidHom.id.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))))) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (MonoidHom.monoidHomClass.{max u2 u1, u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))))) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u2) (succ u1), max (succ u1) (succ (max u1 u2))} (forall (i_1 : ι), MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MonoidHom.{max u1 u2, u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)))) (forall (i_1 : ι), MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (fun (_x : forall (i_1 : ι), MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i_1 : ι), MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) => MonoidHom.{max u1 u2, u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (forall (i_1 : ι), MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MonoidHom.{max u1 u2, u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (M i) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)))) (FreeProduct.lift.{u2, u1, u1} ι M (fun (i : ι) => _inst_1 i) (M i) (_inst_1 i)) (Pi.mulSingle.{u2, u1} ι (fun (i_1 : ι) => MonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (fun (a : ι) (b : ι) => _inst_3 a b) (fun (i_1 : ι) => instOneMonoidHom.{u1, u1} (M i_1) (M i) (Monoid.toMulOneClass.{u1} (M i_1) (_inst_1 i_1)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) i (MonoidHom.id.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)))))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i))
+Case conversion may be inaccurate. Consider using '#align free_product.of_left_inverse FreeProduct.of_leftInverseₓ'. -/
 theorem of_leftInverse [DecidableEq ι] (i : ι) :
     Function.LeftInverse (lift <| Pi.mulSingle i (MonoidHom.id (M i))) of := fun x => by
   simp only [lift_of, Pi.mulSingle_eq_same, MonoidHom.id_apply]
 #align free_product.of_left_inverse FreeProduct.of_leftInverse
 
+/- warning: free_product.of_injective -> FreeProduct.of_injective is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] (i : ι), Function.Injective.{succ u2, succ (max u1 u2)} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i))
+but is expected to have type
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] (i : ι), Function.Injective.{succ u2, max (succ u1) (succ u2)} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FunLike.coe.{max (succ u1) (succ u2), succ u2, max (succ u1) (succ u2)} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u1 u2, u2, max u1 u2} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, max u1 u2} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i))
+Case conversion may be inaccurate. Consider using '#align free_product.of_injective FreeProduct.of_injectiveₓ'. -/
 theorem of_injective (i : ι) : Function.Injective ⇑(of : M i →* _) := by
   classical exact (of_left_inverse i).Injective
 #align free_product.of_injective FreeProduct.of_injective
 
+/- warning: free_product.lift_mrange_le -> FreeProduct.lift_mrange_le is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {N : Type.{u3}} [_inst_3 : Monoid.{u3} N] (f : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) {s : Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)}, (forall (i : ι), LE.le.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (Preorder.toLE.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (SetLike.partialOrder.{u3, u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) N (Submonoid.setLike.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3))))) (MonoidHom.mrange.{u2, u3, max u3 u2} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3) (MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.monoidHomClass.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (f i)) s) -> (LE.le.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (Preorder.toLE.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (SetLike.partialOrder.{u3, u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) N (Submonoid.setLike.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3))))) (MonoidHom.mrange.{max u1 u2, u3, max u3 u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.monoidHomClass.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) (coeFn.{max 1 (max (max (succ u1) (succ u3) (succ u2)) (succ u3) (succ (max u1 u2))) (max (succ u3) (succ (max u1 u2))) (succ u1) (succ u3) (succ u2), max (max (succ u1) (succ u3) (succ u2)) (succ u3) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (fun (_x : Equiv.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) => (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) -> (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (Equiv.hasCoeToFun.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (FreeProduct.lift.{u1, u2, u3} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i) N _inst_3) f)) s)
+but is expected to have type
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {N : Type.{u3}} [_inst_3 : Monoid.{u3} N] (f : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) {s : Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)}, (forall (i : ι), LE.le.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (Preorder.toLE.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (Submonoid.instCompleteLatticeSubmonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)))))) (MonoidHom.mrange.{u2, u3, max u2 u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3) (MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.monoidHomClass.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (f i)) s) -> (LE.le.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (Preorder.toLE.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (PartialOrder.toPreorder.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (CompleteSemilatticeInf.toPartialOrder.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Submonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)) (Submonoid.instCompleteLatticeSubmonoid.{u3} N (Monoid.toMulOneClass.{u3} N _inst_3)))))) (MonoidHom.mrange.{max u1 u2, u3, max (max u1 u2) u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3) ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) f) (MonoidHom.monoidHomClass.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1)} (Equiv.{max (max (succ u1) (succ u2)) (succ u3), max (succ u3) (succ (max u2 u1))} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (fun (_x : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) => MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3)) _x) (Equiv.instFunLikeEquiv.{max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1)} (forall (i : ι), MonoidHom.{u2, u3} (M i) N (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{u3} N _inst_3)) (MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i))) (Monoid.toMulOneClass.{u3} N _inst_3))) (FreeProduct.lift.{u1, u2, u3} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i) N _inst_3) f)) s)
+Case conversion may be inaccurate. Consider using '#align free_product.lift_mrange_le FreeProduct.lift_mrange_leₓ'. -/
 theorem lift_mrange_le {N} [Monoid N] (f : ∀ i, M i →* N) {s : Submonoid N}
     (h : ∀ i, (f i).mrange ≤ s) : (lift f).mrange ≤ s :=
   by
@@ -190,6 +250,7 @@ theorem lift_mrange_le {N} [Monoid N] (f : ∀ i, M i →* N) {s : Submonoid N}
     exact s.mul_mem hx hy
 #align free_product.lift_mrange_le FreeProduct.lift_mrange_le
 
+#print FreeProduct.mrange_eq_supᵢ /-
 theorem mrange_eq_supᵢ {N} [Monoid N] (f : ∀ i, M i →* N) : (lift f).mrange = ⨆ i, (f i).mrange :=
   by
   apply le_antisymm (lift_mrange_le f fun i => le_supᵢ _ i)
@@ -197,6 +258,7 @@ theorem mrange_eq_supᵢ {N} [Monoid N] (f : ∀ i, M i →* N) : (lift f).mrang
   rintro i _ ⟨x, rfl⟩
   exact ⟨of x, by simp only [lift_of]⟩
 #align free_product.mrange_eq_supr FreeProduct.mrange_eq_supᵢ
+-/
 
 section Group
 
@@ -206,6 +268,12 @@ instance : Inv (FreeProduct G)
     where inv :=
     MulOpposite.unop ∘ lift fun i => (of : G i →* _).op.comp (MulEquiv.inv' (G i)).toMonoidHom
 
+/- warning: free_product.inv_def -> FreeProduct.inv_def is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} (G : ι -> Type.{u2}) [_inst_3 : forall (i : ι), Group.{u2} (G i)] (x : FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))), Eq.{succ (max u1 u2)} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Inv.inv.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.hasInv.{u1, u2} ι G (fun (i : ι) => _inst_3 i)) x) (MulOpposite.unop.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (coeFn.{succ (max u1 u2), succ (max u1 u2)} (MonoidHom.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))))) (fun (_x : MonoidHom.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))))) => (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) -> (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))) (MonoidHom.hasCoeToFun.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))))) (coeFn.{max 1 (max (max (succ u1) (succ (max u1 u2)) (succ u2)) (succ (max u1 u2))) (succ (max u1 u2)) (succ u1) (succ (max u1 u2)) (succ u2), max (max (succ u1) (succ (max u1 u2)) (succ u2)) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ (max u1 u2)) (succ u2), succ (max u1 u2)} (forall (i : ι), MonoidHom.{u2, max u1 u2} (G i) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))))) (MonoidHom.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))))) (fun (_x : Equiv.{max (succ u1) (succ (max u1 u2)) (succ u2), succ (max u1 u2)} (forall (i : ι), MonoidHom.{u2, max u1 u2} (G i) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))))) (MonoidHom.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))))) => (forall (i : ι), MonoidHom.{u2, max u1 u2} (G i) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))))) -> (MonoidHom.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))))) (Equiv.hasCoeToFun.{max (succ u1) (succ (max u1 u2)) (succ u2), succ (max u1 u2)} (forall (i : ι), MonoidHom.{u2, max u1 u2} (G i) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))))) (MonoidHom.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u1 u2} (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))))) (FreeProduct.lift.{u1, u2, max u1 u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.monoid.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))) (fun (i : ι) => MonoidHom.comp.{u2, u2, max u1 u2} (G i) (MulOpposite.{u2} (G i)) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u2} (G i) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))) (coeFn.{max 1 (succ (max u1 u2)) (succ u2), max (succ (max u1 u2)) (succ u2)} (Equiv.{max (succ (max u1 u2)) (succ u2), max (succ (max u1 u2)) (succ u2)} (MonoidHom.{u2, max u1 u2} (G i) (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))) (MonoidHom.{u2, max u1 u2} (MulOpposite.{u2} (G i)) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u2} (G i) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))))) (fun (_x : Equiv.{max (succ (max u1 u2)) (succ u2), max (succ (max u1 u2)) (succ u2)} (MonoidHom.{u2, max u1 u2} (G i) (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))) (MonoidHom.{u2, max u1 u2} (MulOpposite.{u2} (G i)) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u2} (G i) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))))) => (MonoidHom.{u2, max u1 u2} (G i) (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))) -> (MonoidHom.{u2, max u1 u2} (MulOpposite.{u2} (G i)) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u2} (G i) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))))) (Equiv.hasCoeToFun.{max (succ (max u1 u2)) (succ u2), max (succ (max u1 u2)) (succ u2)} (MonoidHom.{u2, max u1 u2} (G i) (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))) (MonoidHom.{u2, max u1 u2} (MulOpposite.{u2} (G i)) (MulOpposite.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{u2} (G i) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulOpposite.mulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))))) (MonoidHom.op.{u2, max u1 u2} (G i) (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))))) (FreeProduct.of.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) i)) (MulEquiv.toMonoidHom.{u2, u2} (G i) (MulOpposite.{u2} (G i)) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (MulOpposite.mulOneClass.{u2} (G i) (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (MulEquiv.inv'.{u2} (G i) (Group.toDivisionMonoid.{u2} (G i) (_inst_3 i)))))) x))
+but is expected to have type
+  forall {ι : Type.{u2}} (G : ι -> Type.{u1}) [_inst_3 : forall (i : ι), Group.{u1} (G i)] (x : FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))), Eq.{max (succ u2) (succ u1)} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Inv.inv.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (FreeProduct.instInvFreeProductToMonoidToDivInvMonoid.{u2, u1} ι G (fun (i : ι) => _inst_3 i)) x) (MulOpposite.unop.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) => MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (fun (i : ι) => MonoidHom.comp.{u1, u1, max u2 u1} (G i) (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FunLike.coe.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (Equiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (fun (a : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) a) (Equiv.instFunLikeEquiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.op.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.of.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i)) (MulEquiv.toMonoidHom.{u1, u1} (G i) (MulOpposite.{u1} (G i)) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulEquiv.inv'.{u1} (G i) (Group.toDivisionMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (fun (_x : FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) => MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) _x) (MulHomClass.toFunLike.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) => MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (fun (i : ι) => MonoidHom.comp.{u1, u1, max u2 u1} (G i) (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FunLike.coe.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (Equiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (fun (a : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) a) (Equiv.instFunLikeEquiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.op.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.of.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i)) (MulEquiv.toMonoidHom.{u1, u1} (G i) (MulOpposite.{u1} (G i)) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulEquiv.inv'.{u1} (G i) (Group.toDivisionMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MulOneClass.toMul.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (MonoidHomClass.toMulHomClass.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) => MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (fun (i : ι) => MonoidHom.comp.{u1, u1, max u2 u1} (G i) (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FunLike.coe.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (Equiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (fun (a : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) a) (Equiv.instFunLikeEquiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.op.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.of.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i)) (MulEquiv.toMonoidHom.{u1, u1} (G i) (MulOpposite.{u1} (G i)) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulEquiv.inv'.{u1} (G i) (Group.toDivisionMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.monoidHomClass.{max u2 u1, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))))) (FunLike.coe.{max (max (succ (max u2 u1)) (succ u1)) (succ u2), max (max (succ (max u2 u1)) (succ u1)) (succ u2), max (max (succ (max u2 u1)) (succ u1)) (succ u2)} (Equiv.{max (max (succ u2) (succ u1)) (succ (max u2 u1)), max (succ (max u2 u1)) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (fun (_x : forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) => MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) _x) (Equiv.instFunLikeEquiv.{max (max (succ (max u2 u1)) (succ u1)) (succ u2), max (max (succ (max u2 u1)) (succ u1)) (succ u2)} (forall (i : ι), MonoidHom.{u1, max u2 u1} (G i) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) (MonoidHom.{max u1 u2, max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{max u2 u1} (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (FreeProduct.lift.{u2, u1, max u2 u1} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMonoidMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (fun (i : ι) => MonoidHom.comp.{u1, u1, max u2 u1} (G i) (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FunLike.coe.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (Equiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (fun (_x : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) => MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))))) _x) (Equiv.instFunLikeEquiv.{max (succ (max u2 u1)) (succ u1), max (succ (max u2 u1)) (succ u1)} (MonoidHom.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (MonoidHom.{u1, max u2 u1} (MulOpposite.{u1} (G i)) (MulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulOpposite.instMulOneClassMulOpposite.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))))) (MonoidHom.op.{u1, max u2 u1} (G i) (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))))) (FreeProduct.of.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i)) (MulEquiv.toMonoidHom.{u1, u1} (G i) (MulOpposite.{u1} (G i)) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (MulOpposite.instMulOneClassMulOpposite.{u1} (G i) (Monoid.toMulOneClass.{u1} (G i) (DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))))) (MulEquiv.inv'.{u1} (G i) (Group.toDivisionMonoid.{u1} (G i) (_inst_3 i)))))) x))
+Case conversion may be inaccurate. Consider using '#align free_product.inv_def FreeProduct.inv_defₓ'. -/
 theorem inv_def (x : FreeProduct G) :
     x⁻¹ =
       MulOpposite.unop
@@ -227,6 +295,12 @@ instance : Group (FreeProduct G) :=
         rw [MonoidHom.map_mul, MulOpposite.unop_mul, mul_assoc, ← mul_assoc _ x y, hx, one_mul,
           hy] }
 
+/- warning: free_product.lift_range_le -> FreeProduct.lift_range_le is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} (G : ι -> Type.{u2}) [_inst_3 : forall (i : ι), Group.{u2} (G i)] {N : Type.{u3}} [_inst_4 : Group.{u3} N] (f : forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) {s : Subgroup.{u3} N _inst_4}, (forall (i : ι), LE.le.{u3} (Subgroup.{u3} N _inst_4) (Preorder.toLE.{u3} (Subgroup.{u3} N _inst_4) (PartialOrder.toPreorder.{u3} (Subgroup.{u3} N _inst_4) (SetLike.partialOrder.{u3, u3} (Subgroup.{u3} N _inst_4) N (Subgroup.setLike.{u3} N _inst_4)))) (MonoidHom.range.{u2, u3} (G i) (_inst_3 i) N _inst_4 (f i)) s) -> (LE.le.{u3} (Subgroup.{u3} N _inst_4) (Preorder.toLE.{u3} (Subgroup.{u3} N _inst_4) (PartialOrder.toPreorder.{u3} (Subgroup.{u3} N _inst_4) (SetLike.partialOrder.{u3, u3} (Subgroup.{u3} N _inst_4) N (Subgroup.setLike.{u3} N _inst_4)))) (MonoidHom.range.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.group.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => _inst_3 i)) N _inst_4 (coeFn.{max 1 (max (max (succ u1) (succ u3) (succ u2)) (succ u3) (succ (max u1 u2))) (max (succ u3) (succ (max u1 u2))) (succ u1) (succ u3) (succ u2), max (max (succ u1) (succ u3) (succ u2)) (succ u3) (succ (max u1 u2))} (Equiv.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))))) (fun (_x : Equiv.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))))) => (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) -> (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))))) (Equiv.hasCoeToFun.{max (succ u1) (succ u3) (succ u2), max (succ u3) (succ (max u1 u2))} (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) (MonoidHom.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.monoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))))) (FreeProduct.lift.{u1, u2, u3} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))) f)) s)
+but is expected to have type
+  forall {ι : Type.{u1}} (G : ι -> Type.{u2}) [_inst_3 : forall (i : ι), Group.{u2} (G i)] {N : Type.{u3}} [_inst_4 : Group.{u3} N] (f : forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) {s : Subgroup.{u3} N _inst_4}, (forall (i : ι), LE.le.{u3} (Subgroup.{u3} N _inst_4) (Preorder.toLE.{u3} (Subgroup.{u3} N _inst_4) (PartialOrder.toPreorder.{u3} (Subgroup.{u3} N _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u3} (Subgroup.{u3} N _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Subgroup.{u3} N _inst_4) (Subgroup.instCompleteLatticeSubgroup.{u3} N _inst_4))))) (MonoidHom.range.{u2, u3} (G i) (_inst_3 i) N _inst_4 (f i)) s) -> (LE.le.{u3} (Subgroup.{u3} N _inst_4) (Preorder.toLE.{u3} (Subgroup.{u3} N _inst_4) (PartialOrder.toPreorder.{u3} (Subgroup.{u3} N _inst_4) (CompleteSemilatticeInf.toPartialOrder.{u3} (Subgroup.{u3} N _inst_4) (CompleteLattice.toCompleteSemilatticeInf.{u3} (Subgroup.{u3} N _inst_4) (Subgroup.instCompleteLatticeSubgroup.{u3} N _inst_4))))) (MonoidHom.range.{max u1 u2, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.instGroupFreeProductToMonoidToDivInvMonoid.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => _inst_3 i)) N _inst_4 (FunLike.coe.{max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1)} (Equiv.{max (max (succ u1) (succ u2)) (succ u3), max (succ u3) (succ (max u2 u1))} (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) (MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))))) (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) (fun (_x : forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) => MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) _x) (Equiv.instFunLikeEquiv.{max (max (succ u3) (succ u2)) (succ u1), max (max (succ u3) (succ u2)) (succ u1)} (forall (i : ι), MonoidHom.{u2, u3} (G i) N (Monoid.toMulOneClass.{u2} (G i) (DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4)))) (MonoidHom.{max u2 u1, u3} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) N (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (instMonoidFreeProduct.{u1, u2} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))))) (Monoid.toMulOneClass.{u3} N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))))) (FreeProduct.lift.{u1, u2, u3} ι (fun (i : ι) => G i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) N (DivInvMonoid.toMonoid.{u3} N (Group.toDivInvMonoid.{u3} N _inst_4))) f)) s)
+Case conversion may be inaccurate. Consider using '#align free_product.lift_range_le FreeProduct.lift_range_leₓ'. -/
 theorem lift_range_le {N} [Group N] (f : ∀ i, G i →* N) {s : Subgroup N}
     (h : ∀ i, (f i).range ≤ s) : (lift f).range ≤ s :=
   by
@@ -239,6 +313,7 @@ theorem lift_range_le {N} [Group N] (f : ∀ i, G i →* N) {s : Subgroup N}
     exact s.mul_mem hx hy
 #align free_product.lift_range_le FreeProduct.lift_range_le
 
+#print FreeProduct.range_eq_supᵢ /-
 theorem range_eq_supᵢ {N} [Group N] (f : ∀ i, G i →* N) : (lift f).range = ⨆ i, (f i).range :=
   by
   apply le_antisymm (lift_range_le _ f fun i => le_supᵢ _ i)
@@ -246,37 +321,56 @@ theorem range_eq_supᵢ {N} [Group N] (f : ∀ i, G i →* N) : (lift f).range =
   rintro i _ ⟨x, rfl⟩
   exact ⟨of x, by simp only [lift_of]⟩
 #align free_product.range_eq_supr FreeProduct.range_eq_supᵢ
+-/
 
 end Group
 
 namespace Word
 
+#print FreeProduct.Word.empty /-
 /-- The empty reduced word. -/
 def empty : Word M where
   toList := []
   ne_one _ := False.elim
   chain_ne := List.chain'_nil
 #align free_product.word.empty FreeProduct.Word.empty
+-/
 
 instance : Inhabited (Word M) :=
   ⟨empty⟩
 
+#print FreeProduct.Word.prod /-
 /-- A reduced word determines an element of the free product, given by multiplication. -/
 def prod (w : Word M) : FreeProduct M :=
   List.prod (w.toList.map fun l => of l.snd)
 #align free_product.word.prod FreeProduct.Word.prod
+-/
 
+/- warning: free_product.word.prod_empty -> FreeProduct.Word.prod_empty is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)], Eq.{succ (max u1 u2)} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.prod.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (FreeProduct.Word.empty.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (OfNat.ofNat.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) 1 (OfNat.mk.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) 1 (One.one.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toHasOne.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))))))
+but is expected to have type
+  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)], Eq.{max (succ u2) (succ u1)} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.prod.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (FreeProduct.Word.empty.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (OfNat.ofNat.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) 1 (One.toOfNat1.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toOne.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))
+Case conversion may be inaccurate. Consider using '#align free_product.word.prod_empty FreeProduct.Word.prod_emptyₓ'. -/
 @[simp]
 theorem prod_empty : prod (empty : Word M) = 1 :=
   rfl
 #align free_product.word.prod_empty FreeProduct.Word.prod_empty
 
+#print FreeProduct.Word.fstIdx /-
 /-- `fst_idx w` is `some i` if the first letter of `w` is `⟨i, m⟩` with `m : M i`. If `w` is empty
 then it's `none`. -/
 def fstIdx (w : Word M) : Option ι :=
   w.toList.head?.map Sigma.fst
 #align free_product.word.fst_idx FreeProduct.Word.fstIdx
+-/
 
+/- warning: free_product.word.fst_idx_ne_iff -> FreeProduct.Word.fstIdx_ne_iff is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {w : FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)} {i : ι}, Iff (Ne.{succ u1} (Option.{u1} ι) (FreeProduct.Word.fstIdx.{u1, u2} ι M (fun (i : ι) => _inst_1 i) w) (Option.some.{u1} ι i)) (forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.Mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Option.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Option.hasMem.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.head?.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (FreeProduct.Word.toList.{u1, u2} ι M (fun (i : ι) => _inst_1 i) w))) -> (Ne.{succ u1} ι i (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)))
+but is expected to have type
+  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] {w : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)} {i : ι}, Iff (Ne.{succ u2} (Option.{u2} ι) (FreeProduct.Word.fstIdx.{u2, u1} ι M (fun (i : ι) => _inst_1 i) w) (Option.some.{u2} ι i)) (forall (l : Sigma.{u2, u1} ι (fun (i : ι) => M i)), (Membership.mem.{max u2 u1, max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i)) (Option.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (Option.instMembershipOption.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) l (List.head?.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i)) (FreeProduct.Word.toList.{u2, u1} ι M (fun (i : ι) => _inst_1 i) w))) -> (Ne.{succ u2} ι i (Sigma.fst.{u2, u1} ι (fun (i : ι) => M i) l)))
+Case conversion may be inaccurate. Consider using '#align free_product.word.fst_idx_ne_iff FreeProduct.Word.fstIdx_ne_iffₓ'. -/
 theorem fstIdx_ne_iff {w : Word M} {i} :
     fstIdx w ≠ some i ↔ ∀ l ∈ w.toList.head?, i ≠ Sigma.fst l :=
   not_iff_not.mp <| by simp [fst_idx]
@@ -284,6 +378,7 @@ theorem fstIdx_ne_iff {w : Word M} {i} :
 
 variable (M)
 
+#print FreeProduct.Word.Pair /-
 /-- Given an index `i : ι`, `pair M i` is the type of pairs `(head, tail)` where `head : M i` and
 `tail : word M`, subject to the constraint that first letter of `tail` can't be `⟨i, m⟩`.
 By prepending `head` to `tail`, one obtains a new word. We'll show that any word can be uniquely
@@ -294,6 +389,7 @@ structure Pair (i : ι) where
   tail : Word M
   fstIdx_ne : fstIdx tail ≠ some i
 #align free_product.word.pair FreeProduct.Word.Pair
+-/
 
 instance (i : ι) : Inhabited (Pair M i) :=
   ⟨⟨1, empty, by tauto⟩⟩
@@ -303,6 +399,7 @@ variable {M}
 variable [∀ i, DecidableEq (M i)]
 
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print FreeProduct.Word.rcons /-
 /-- Given a pair `(head, tail)`, we can form a word by prepending `head` to `tail`, except if `head`
 is `1 : M i` then we have to just return `word` since we need the result to be reduced. -/
 def rcons {i} (p : Pair M i) : Word M :=
@@ -315,6 +412,7 @@ def rcons {i} (p : Pair M i) : Word M :=
         exact p.tail.ne_one l hl
       chain_ne := p.tail.chain_ne.cons' (fstIdx_ne_iff.mp p.fstIdx_ne) }
 #align free_product.word.rcons FreeProduct.Word.rcons
+-/
 
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@@ -325,6 +423,12 @@ private def mk_aux {l} (ls : List (Σi, M i)) (h1 : ∀ l' ∈ l::ls, Sigma.snd
   ⟨ls, fun l' hl => h1 _ (List.mem_cons_of_mem _ hl), h2.tail⟩
 #align free_product.word.mk_aux free_product.word.mk_aux
 
+/- warning: free_product.word.cons_eq_rcons -> FreeProduct.Word.cons_eq_rcons is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] {i : ι} {m : M i} {ls : List.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))} {h1 : forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.Mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (List.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (List.hasMem.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)) -> (Ne.{succ u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Sigma.snd.{u1, u2} ι (fun (i : ι) => M i) l) (OfNat.ofNat.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (OfNat.mk.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (One.one.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (MulOneClass.toHasOne.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Monoid.toMulOneClass.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (_inst_1 (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l))))))))} {h2 : List.Chain'.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (fun (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)) (l' : Sigma.{u1, u2} ι (fun (i : ι) => M i)) => Ne.{succ u1} ι (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l) (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l')) (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)}, Eq.{max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mk.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls) h1 h2) (FreeProduct.Word.rcons.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i (FreeProduct.Word.Pair.mk.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) i m (_Private.1252409595.mkAux.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2) (Iff.mpr (Ne.{succ u1} (Option.{u1} ι) (FreeProduct.Word.fstIdx.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (_Private.1252409595.mkAux.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2)) (Option.some.{u1} ι i)) (forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.Mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Option.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Option.hasMem.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.head?.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (FreeProduct.Word.toList.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (_Private.1252409595.mkAux.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2)))) -> (Ne.{succ u1} ι i (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l))) (FreeProduct.Word.fstIdx_ne_iff.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (_Private.1252409595.mkAux.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2) i) (List.Chain'.rel_head?.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (fun (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)) (l' : Sigma.{u1, u2} ι (fun (i : ι) => M i)) => Ne.{succ u1} ι (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l) (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l')) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h2))))
+but is expected to have type
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] {i : ι} {m : M i} {ls : List.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i))} {h1 : forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (List.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (List.instMembershipList.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.cons.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)) -> (Ne.{succ u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Sigma.snd.{u1, u2} ι (fun (i : ι) => M i) l) (OfNat.ofNat.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (One.toOfNat1.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Monoid.toOne.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (_inst_1 (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l))))))} {h2 : List.Chain'.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (fun (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)) (l' : Sigma.{u1, u2} ι (fun (i : ι) => M i)) => Ne.{succ u1} ι (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l) (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l')) (List.cons.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)}, Eq.{max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mk.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (List.cons.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls) h1 h2) (FreeProduct.Word.rcons.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i (FreeProduct.Word.Pair.mk.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i m (_private.Mathlib.GroupTheory.FreeProduct.0.FreeProduct.Word.mkAux.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2) (Iff.mpr (Ne.{succ u1} (Option.{u1} ι) (FreeProduct.Word.fstIdx.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (_private.Mathlib.GroupTheory.FreeProduct.0.FreeProduct.Word.mkAux.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2)) (Option.some.{u1} ι i)) (forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Option.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (Option.instMembershipOption.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.head?.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (FreeProduct.Word.toList.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (_private.Mathlib.GroupTheory.FreeProduct.0.FreeProduct.Word.mkAux.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2)))) -> (Ne.{succ u1} ι i (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l))) (FreeProduct.Word.fstIdx_ne_iff.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (_private.Mathlib.GroupTheory.FreeProduct.0.FreeProduct.Word.mkAux.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2) i) (List.Chain'.rel_head?.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (fun (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)) (l' : Sigma.{u1, u2} ι (fun (i : ι) => M i)) => Ne.{succ u1} ι (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l) (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l')) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h2))))
+Case conversion may be inaccurate. Consider using '#align free_product.word.cons_eq_rcons FreeProduct.Word.cons_eq_rconsₓ'. -/
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
 theorem cons_eq_rcons {i} {m : M i} {ls h1 h2} :
     Word.mk (⟨i, m⟩::ls) h1 h2 = rcons ⟨m, mkAux ls h1 h2, fstIdx_ne_iff.mpr h2.rel_head?⟩ :=
@@ -334,12 +438,24 @@ theorem cons_eq_rcons {i} {m : M i} {ls h1 h2} :
   exact h1 ⟨i, m⟩ (ls.mem_cons_self _)
 #align free_product.word.cons_eq_rcons FreeProduct.Word.cons_eq_rcons
 
+/- warning: free_product.word.prod_rcons -> FreeProduct.Word.prod_rcons is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] {i : ι} (p : FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i), Eq.{succ (max u1 u2)} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.prod.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (FreeProduct.Word.rcons.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i p)) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instHMul.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toHasMul.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i))))) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.Pair.head.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i p)) (FreeProduct.Word.prod.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (FreeProduct.Word.Pair.tail.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i p)))
+but is expected to have type
+  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u1} (M i)] {i : ι} (p : FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i), Eq.{max (succ u2) (succ u1)} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.prod.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (FreeProduct.Word.rcons.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i p)) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i p)) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i p)) (instHMul.{max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i p)) (MulOneClass.toMul.{max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i p)) (Monoid.toMulOneClass.{max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i p)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.Pair.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i p)) (FreeProduct.Word.prod.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (FreeProduct.Word.Pair.tail.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i p)))
+Case conversion may be inaccurate. Consider using '#align free_product.word.prod_rcons FreeProduct.Word.prod_rconsₓ'. -/
 @[simp]
 theorem prod_rcons {i} (p : Pair M i) : prod (rcons p) = of p.headI * prod p.tail :=
   if hm : p.headI = 1 then by rw [rcons, dif_pos hm, hm, MonoidHom.map_one, one_mul]
   else by rw [rcons, dif_neg hm, Prod, List.map_cons, List.prod_cons, Prod]
 #align free_product.word.prod_rcons FreeProduct.Word.prod_rcons
 
+/- warning: free_product.word.rcons_inj -> FreeProduct.Word.rcons_inj is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] {i : ι}, Function.Injective.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.rcons.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i)
+but is expected to have type
+  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u1} (M i)] {i : ι}, Function.Injective.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.rcons.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i)
+Case conversion may be inaccurate. Consider using '#align free_product.word.rcons_inj FreeProduct.Word.rcons_injₓ'. -/
 theorem rcons_inj {i} : Function.Injective (rcons : Pair M i → Word M) :=
   by
   rintro ⟨m, w, h⟩ ⟨m', w', h'⟩ he
@@ -380,6 +496,7 @@ private def equiv_pair_aux (i) : ∀ w : Word M, { p : Pair M i // rcons p = w }
     else ⟨⟨1, w, (Option.some_injective _).Ne (Ne.symm ij)⟩, dif_pos rfl⟩
 #align free_product.word.equiv_pair_aux free_product.word.equiv_pair_aux
 
+#print FreeProduct.Word.equivPair /-
 /-- The equivalence between words and pairs. Given a word, it decomposes it as a pair by removing
 the first letter if it comes from `M i`. Given a pair, it prepends the head to the tail. -/
 def equivPair (i) : Word M ≃ Pair M i
@@ -389,16 +506,30 @@ def equivPair (i) : Word M ≃ Pair M i
   left_inv w := (equivPairAux i w).property
   right_inv p := rcons_inj (equivPairAux i _).property
 #align free_product.word.equiv_pair FreeProduct.Word.equivPair
+-/
 
+/- warning: free_product.word.equiv_pair_symm -> FreeProduct.Word.equivPair_symm is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] [_inst_4 : DecidableEq.{succ u1} ι] (i : ι) (p : FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i), Eq.{max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (coeFn.{max 1 (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) => (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) -> (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (Equiv.symm.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.equivPair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i)) p) (FreeProduct.Word.rcons.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i p)
+but is expected to have type
+  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u1} (M i)] [_inst_4 : DecidableEq.{succ u2} ι] (i : ι) (p : FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) => FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) p) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) (fun (_x : FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) => FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (Equiv.symm.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) (FreeProduct.Word.equivPair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i)) p) (FreeProduct.Word.rcons.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i p)
+Case conversion may be inaccurate. Consider using '#align free_product.word.equiv_pair_symm FreeProduct.Word.equivPair_symmₓ'. -/
 theorem equivPair_symm (i) (p : Pair M i) : (equivPair i).symm p = rcons p :=
   rfl
 #align free_product.word.equiv_pair_symm FreeProduct.Word.equivPair_symm
 
+/- warning: free_product.word.equiv_pair_eq_of_fst_idx_ne -> FreeProduct.Word.equivPair_eq_of_fstIdx_ne is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] [_inst_4 : DecidableEq.{succ u1} ι] {i : ι} {w : FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)} (h : Ne.{succ u1} (Option.{u1} ι) (FreeProduct.Word.fstIdx.{u1, u2} ι M (fun (i : ι) => _inst_1 i) w) (Option.some.{u1} ι i)), Eq.{max (succ u1) (succ u2)} (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) (coeFn.{max 1 (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) => (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) -> (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.equivPair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i) w) (FreeProduct.Word.Pair.mk.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i (OfNat.ofNat.{u2} (M i) 1 (OfNat.mk.{u2} (M i) 1 (One.one.{u2} (M i) (MulOneClass.toHasOne.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)))))) w h)
+but is expected to have type
+  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u1} (M i)] [_inst_4 : DecidableEq.{succ u2} ι] {i : ι} {w : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)} (h : Ne.{succ u2} (Option.{u2} ι) (FreeProduct.Word.fstIdx.{u2, u1} ι M (fun (i : ι) => _inst_1 i) w) (Option.some.{u2} ι i)), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) w) (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (fun (_x : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.equivPair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i) w) (FreeProduct.Word.Pair.mk.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i (OfNat.ofNat.{u1} (M i) 1 (One.toOfNat1.{u1} (M i) (Monoid.toOne.{u1} (M i) (_inst_1 i)))) w h)
+Case conversion may be inaccurate. Consider using '#align free_product.word.equiv_pair_eq_of_fst_idx_ne FreeProduct.Word.equivPair_eq_of_fstIdx_neₓ'. -/
 theorem equivPair_eq_of_fstIdx_ne {i} {w : Word M} (h : fstIdx w ≠ some i) :
     equivPair i w = ⟨1, w, h⟩ :=
   (equivPair i).apply_eq_iff_eq_symm_apply.mpr <| Eq.symm (dif_pos rfl)
 #align free_product.word.equiv_pair_eq_of_fst_idx_ne FreeProduct.Word.equivPair_eq_of_fstIdx_ne
 
+#print FreeProduct.Word.summandAction /-
 instance summandAction (i) : MulAction (M i) (Word M)
     where
   smul m w := rcons { equivPair i w with headI := m * (equivPair i w).headI }
@@ -408,21 +539,40 @@ instance summandAction (i) : MulAction (M i) (Word M)
     ext <;> rfl
   mul_smul m m' w := by simp only [mul_assoc, ← equiv_pair_symm, Equiv.apply_symm_apply]
 #align free_product.word.summand_action FreeProduct.Word.summandAction
+-/
 
 instance : MulAction (FreeProduct M) (Word M) :=
   MulAction.ofEndHom (lift fun i => MulAction.toEndHom)
 
+/- warning: free_product.word.of_smul_def -> FreeProduct.Word.of_smul_def is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] [_inst_4 : DecidableEq.{succ u1} ι] (i : ι) (w : FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (m : M i), Eq.{succ (max u1 u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (SMul.smul.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulAction.toHasSmul.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mulAction.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b))) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m) w) (FreeProduct.Word.rcons.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i (FreeProduct.Word.Pair.mk.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i (HMul.hMul.{u2, u2, u2} (M i) (M i) (M i) (instHMul.{u2} (M i) (MulOneClass.toHasMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)))) m (FreeProduct.Word.Pair.head.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i (coeFn.{max 1 (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) => (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) -> (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.equivPair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i) w))) (FreeProduct.Word.Pair.tail.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i (coeFn.{max 1 (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) => (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) -> (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.equivPair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i) w)) (FreeProduct.Word.Pair.fstIdx_ne.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i (coeFn.{max 1 (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) => (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) -> (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.equivPair.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i) w))))
+but is expected to have type
+  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u1} (M i)] [_inst_4 : DecidableEq.{succ u2} ι] (i : ι) (w : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (m : M i), Eq.{max (succ u2) (succ u1)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (HSMul.hSMul.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instHSMul.{max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulAction.toSMul.{max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.instMulActionFreeProductWordInstMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b)))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) m) w) (FreeProduct.Word.rcons.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) i (let src._@.Mathlib.GroupTheory.FreeProduct._hyg.3971 : (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) w := FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (fun (a : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) a) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.equivPair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i) w; FreeProduct.Word.Pair.mk.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i (HMul.hMul.{u1, u1, u1} (M i) (M i) (M i) (instHMul.{u1} (M i) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)))) m (FreeProduct.Word.Pair.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i (FunLike.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1), max (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (fun (a : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) => FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) a) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.Pair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i)) (FreeProduct.Word.equivPair.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b) i) w))) (FreeProduct.Word.Pair.tail.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i src._@.Mathlib.GroupTheory.FreeProduct._hyg.3971) (FreeProduct.Word.Pair.fstIdx_ne.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i src._@.Mathlib.GroupTheory.FreeProduct._hyg.3971)))
+Case conversion may be inaccurate. Consider using '#align free_product.word.of_smul_def FreeProduct.Word.of_smul_defₓ'. -/
 theorem of_smul_def (i) (w : Word M) (m : M i) :
     of m • w = rcons { equivPair i w with headI := m * (equivPair i w).headI } :=
   rfl
 #align free_product.word.of_smul_def FreeProduct.Word.of_smul_def
 
+/- warning: free_product.word.cons_eq_smul -> FreeProduct.Word.cons_eq_smul is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] [_inst_4 : DecidableEq.{succ u1} ι] {i : ι} {m : M i} {ls : List.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))} {h1 : forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.Mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (List.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (List.hasMem.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)) -> (Ne.{succ u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Sigma.snd.{u1, u2} ι (fun (i : ι) => M i) l) (OfNat.ofNat.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (OfNat.mk.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (One.one.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (MulOneClass.toHasOne.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Monoid.toMulOneClass.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (_inst_1 (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l))))))))} {h2 : List.Chain'.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (fun (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)) (l' : Sigma.{u1, u2} ι (fun (i : ι) => M i)) => Ne.{succ u1} ι (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l) (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l')) (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)}, Eq.{max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mk.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (List.cons.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls) h1 h2) (SMul.smul.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i)) (MulAction.toHasSmul.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mulAction.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b))) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m) (_Private.1252409595.mkAux.{u1, u2} ι (fun {i : ι} => M i) (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2))
+but is expected to have type
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] [_inst_4 : DecidableEq.{succ u1} ι] {i : ι} {m : M i} {ls : List.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i))} {h1 : forall (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)), (Membership.mem.{max u1 u2, max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (List.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (List.instMembershipList.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) l (List.cons.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)) -> (Ne.{succ u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Sigma.snd.{u1, u2} ι (fun (i : ι) => M i) l) (OfNat.ofNat.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) 1 (One.toOfNat1.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (Monoid.toOne.{u2} (M (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l)) (_inst_1 (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l))))))} {h2 : List.Chain'.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (fun (l : Sigma.{u1, u2} ι (fun (i : ι) => M i)) (l' : Sigma.{u1, u2} ι (fun (i : ι) => M i)) => Ne.{succ u1} ι (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l) (Sigma.fst.{u1, u2} ι (fun (i : ι) => M i) l')) (List.cons.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls)}, Eq.{max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mk.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (List.cons.{max u2 u1} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls) h1 h2) (HSMul.hSMul.{max u1 u2, max u2 u1, max u1 u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instHSMul.{max u1 u2, max u1 u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (MulAction.toSMul.{max u1 u2, max u1 u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.instMulActionFreeProductWordInstMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, max (succ u2) (succ u1)} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m) (_private.Mathlib.GroupTheory.FreeProduct.0.FreeProduct.Word.mkAux.{u1, u2} ι (fun (i : ι) => M i) (fun (i : ι) => _inst_1 i) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i m) ls h1 h2))
+Case conversion may be inaccurate. Consider using '#align free_product.word.cons_eq_smul FreeProduct.Word.cons_eq_smulₓ'. -/
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
 theorem cons_eq_smul {i} {m : M i} {ls h1 h2} :
     Word.mk (⟨i, m⟩::ls) h1 h2 = of m • mkAux ls h1 h2 := by
   rw [cons_eq_rcons, of_smul_def, equiv_pair_eq_of_fst_idx_ne _] <;> simp only [mul_one]
 #align free_product.word.cons_eq_smul FreeProduct.Word.cons_eq_smul
 
+/- warning: free_product.word.smul_induction -> FreeProduct.Word.smul_induction is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] [_inst_4 : DecidableEq.{succ u1} ι] {C : (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) -> Prop}, (C (FreeProduct.Word.empty.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) -> (forall (i : ι) (m : M i) (w : FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)), (C w) -> (C (SMul.smul.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulAction.toHasSmul.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mulAction.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b))) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) m) w))) -> (forall (w : FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)), C w)
+but is expected to have type
+  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u1} (M i)] [_inst_4 : DecidableEq.{succ u2} ι] {C : (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) -> Prop}, (C (FreeProduct.Word.empty.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) -> (forall (i : ι) (m : M i) (w : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)), (C w) -> (C (HSMul.hSMul.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instHSMul.{max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulAction.toSMul.{max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) m) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.instMulActionFreeProductWordInstMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b)))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) m) w))) -> (forall (w : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)), C w)
+Case conversion may be inaccurate. Consider using '#align free_product.word.smul_induction FreeProduct.Word.smul_inductionₓ'. -/
 theorem smul_induction {C : Word M → Prop} (h_empty : C empty)
     (h_smul : ∀ (i) (m : M i) (w), C w → C (of m • w)) (w : Word M) : C w :=
   by
@@ -434,6 +584,12 @@ theorem smul_induction {C : Word M → Prop} (h_empty : C empty)
   exact h_smul _ _ _ (ih _ _)
 #align free_product.word.smul_induction FreeProduct.Word.smul_induction
 
+/- warning: free_product.word.prod_smul -> FreeProduct.Word.prod_smul is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u2} (M i)] [_inst_4 : DecidableEq.{succ u1} ι] (m : FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (w : FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)), Eq.{succ (max u1 u2)} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.prod.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (SMul.smul.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulAction.toHasSmul.{max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.mulAction.{u1, u2} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b))) m w)) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instHMul.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toHasMul.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i))))) m (FreeProduct.Word.prod.{u1, u2} ι M (fun (i : ι) => _inst_1 i) w))
+but is expected to have type
+  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] [_inst_3 : forall (i : ι), DecidableEq.{succ u1} (M i)] [_inst_4 : DecidableEq.{succ u2} ι] (m : FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (w : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)), Eq.{max (succ u1) (succ u2)} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.prod.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (HSMul.hSMul.{max u2 u1, max u2 u1, max u1 u2} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instHSMul.{max u2 u1, max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulAction.toSMul.{max u2 u1, max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.Word.instMulActionFreeProductWordInstMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i) (fun (i : ι) (a : M i) (b : M i) => _inst_3 i a b) (fun (a : ι) (b : ι) => _inst_4 a b)))) m w)) (HMul.hMul.{max u2 u1, max u2 u1, max u1 u2} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instHMul.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))))) m (FreeProduct.Word.prod.{u2, u1} ι M (fun (i : ι) => _inst_1 i) w))
+Case conversion may be inaccurate. Consider using '#align free_product.word.prod_smul FreeProduct.Word.prod_smulₓ'. -/
 @[simp]
 theorem prod_smul (m) : ∀ w : Word M, prod (m • w) = m * prod w :=
   by
@@ -447,6 +603,7 @@ theorem prod_smul (m) : ∀ w : Word M, prod (m • w) = m * prod w :=
     rw [mul_smul, hx, hy, mul_assoc]
 #align free_product.word.prod_smul FreeProduct.Word.prod_smul
 
+#print FreeProduct.Word.equiv /-
 /-- Each element of the free product corresponds to a unique reduced word. -/
 def equiv : FreeProduct M ≃ Word M where
   toFun m := m • empty
@@ -460,6 +617,7 @@ def equiv : FreeProduct M ≃ Word M where
       intro i m w ih
       rw [prod_smul, mul_smul, ih]
 #align free_product.word.equiv FreeProduct.Word.equiv
+-/
 
 instance : DecidableEq (Word M) :=
   Function.Injective.decidableEq Word.ext
@@ -471,14 +629,16 @@ end Word
 
 variable (M)
 
+#print FreeProduct.NeWord /-
 /-- A `neword M i j` is a representation of a non-empty reduced words where the first letter comes
 from `M i` and the last letter comes from `M j`. It can be constructed from singletons and via
 concatentation, and thus provides a useful induction principle. -/
 @[nolint has_nonempty_instance]
-inductive Neword : ι → ι → Type max u_1 u_2
+inductive NeWord : ι → ι → Type max u_1 u_2
   | singleton : ∀ {i} (x : M i) (hne1 : x ≠ 1), neword i i
   | append : ∀ {i j k l} (w₁ : neword i j) (hne : j ≠ k) (w₂ : neword k l), neword i l
-#align free_product.neword FreeProduct.Neword
+#align free_product.neword FreeProduct.NeWord
+-/
 
 variable {M}
 
@@ -486,57 +646,82 @@ namespace Neword
 
 open Word
 
+#print FreeProduct.NeWord.toList /-
 /-- The list represented by a given `neword` -/
 @[simp]
-def toList : ∀ {i j} (w : Neword M i j), List (Σi, M i)
+def toList : ∀ {i j} (w : NeWord M i j), List (Σi, M i)
   | i, _, singleton x hne1 => [⟨i, x⟩]
   | _, _, append w₁ hne w₂ => w₁.toList ++ w₂.toList
-#align free_product.neword.to_list FreeProduct.Neword.toList
+#align free_product.neword.to_list FreeProduct.NeWord.toList
+-/
 
-theorem toList_ne_nil {i j} (w : Neword M i j) : w.toList ≠ List.nil :=
+/- warning: free_product.neword.to_list_ne_nil -> FreeProduct.NeWord.toList_ne_nil is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j), Ne.{succ (max u1 u2)} (List.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (FreeProduct.NeWord.toList.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w) (List.nil.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)))
+but is expected to have type
+  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j), Ne.{max (succ u2) (succ u1)} (List.{max u1 u2} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (FreeProduct.NeWord.toList.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w) (List.nil.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i)))
+Case conversion may be inaccurate. Consider using '#align free_product.neword.to_list_ne_nil FreeProduct.NeWord.toList_ne_nilₓ'. -/
+theorem toList_ne_nil {i j} (w : NeWord M i j) : w.toList ≠ List.nil :=
   by
   induction w
   · rintro ⟨rfl⟩
   · apply List.append_ne_nil_of_ne_nil_left
     assumption
-#align free_product.neword.to_list_ne_nil FreeProduct.Neword.toList_ne_nil
+#align free_product.neword.to_list_ne_nil FreeProduct.NeWord.toList_ne_nil
 
+#print FreeProduct.NeWord.head /-
 /-- The first letter of a `neword` -/
 @[simp]
-def head : ∀ {i j} (w : Neword M i j), M i
+def head : ∀ {i j} (w : NeWord M i j), M i
   | i, _, singleton x hne1 => x
   | _, _, append w₁ hne w₂ => w₁.headI
-#align free_product.neword.head FreeProduct.Neword.head
+#align free_product.neword.head FreeProduct.NeWord.head
+-/
 
+#print FreeProduct.NeWord.last /-
 /-- The last letter of a `neword` -/
 @[simp]
-def last : ∀ {i j} (w : Neword M i j), M j
+def last : ∀ {i j} (w : NeWord M i j), M j
   | i, _, singleton x hne1 => x
   | _, _, append w₁ hne w₂ => w₂.getLast
-#align free_product.neword.last FreeProduct.Neword.last
+#align free_product.neword.last FreeProduct.NeWord.last
+-/
 
+/- warning: free_product.neword.to_list_head' -> FreeProduct.NeWord.toList_head? is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j), Eq.{succ (max u1 u2)} (Option.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (List.head?.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (FreeProduct.NeWord.toList.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w)) (Option.some.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) i (FreeProduct.NeWord.head.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w)))
+but is expected to have type
+  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j), Eq.{max (succ u2) (succ u1)} (Option.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (List.head?.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i)) (FreeProduct.NeWord.toList.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w)) (Option.some.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i)) (Sigma.mk.{u2, u1} ι (fun (i : ι) => M i) i (FreeProduct.NeWord.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w)))
+Case conversion may be inaccurate. Consider using '#align free_product.neword.to_list_head' FreeProduct.NeWord.toList_head?ₓ'. -/
 @[simp]
-theorem toList_head? {i j} (w : Neword M i j) : w.toList.head? = Option.some ⟨i, w.headI⟩ :=
+theorem toList_head? {i j} (w : NeWord M i j) : w.toList.head? = Option.some ⟨i, w.headI⟩ :=
   by
   rw [← Option.mem_def]
   induction w
   · rw [Option.mem_def]
     rfl
   · exact List.head?_append w_ih_w₁
-#align free_product.neword.to_list_head' FreeProduct.Neword.toList_head?
-
+#align free_product.neword.to_list_head' FreeProduct.NeWord.toList_head?
+
+/- warning: free_product.neword.to_list_last' -> FreeProduct.NeWord.toList_getLast? is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j), Eq.{succ (max u1 u2)} (Option.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i))) (List.getLast?.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (FreeProduct.NeWord.toList.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w)) (Option.some.{max u1 u2} (Sigma.{u1, u2} ι (fun (i : ι) => M i)) (Sigma.mk.{u1, u2} ι (fun (i : ι) => M i) j (FreeProduct.NeWord.last.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w)))
+but is expected to have type
+  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j), Eq.{max (succ u2) (succ u1)} (Option.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i))) (List.getLast?.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i)) (FreeProduct.NeWord.toList.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w)) (Option.some.{max u2 u1} (Sigma.{u2, u1} ι (fun (i : ι) => M i)) (Sigma.mk.{u2, u1} ι (fun (i : ι) => M i) j (FreeProduct.NeWord.last.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w)))
+Case conversion may be inaccurate. Consider using '#align free_product.neword.to_list_last' FreeProduct.NeWord.toList_getLast?ₓ'. -/
 @[simp]
-theorem toList_getLast? {i j} (w : Neword M i j) : w.toList.getLast? = Option.some ⟨j, w.getLast⟩ :=
+theorem toList_getLast? {i j} (w : NeWord M i j) : w.toList.getLast? = Option.some ⟨j, w.getLast⟩ :=
   by
   rw [← Option.mem_def]
   induction w
   · rw [Option.mem_def]
     rfl
   · exact List.getLast?_append w_ih_w₂
-#align free_product.neword.to_list_last' FreeProduct.Neword.toList_getLast?
+#align free_product.neword.to_list_last' FreeProduct.NeWord.toList_getLast?
 
+#print FreeProduct.NeWord.toWord /-
 /-- The `word M` represented by a `neword M i j` -/
-def toWord {i j} (w : Neword M i j) : Word M
+def toWord {i j} (w : NeWord M i j) : Word M
     where
   toList := w.toList
   ne_one := by
@@ -560,11 +745,18 @@ def toWord {i j} (w : Neword M i j) : Word M
       subst hx
       subst hy
       exact w_hne
-#align free_product.neword.to_word FreeProduct.Neword.toWord
+#align free_product.neword.to_word FreeProduct.NeWord.toWord
+-/
 
+/- warning: free_product.neword.of_word -> FreeProduct.NeWord.of_word is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] (w : FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)), (Ne.{max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) w (FreeProduct.Word.empty.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) -> (Exists.{succ u1} ι (fun (i : ι) => Exists.{succ u1} ι (fun (j : ι) => Exists.{succ (max u1 u2)} (FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j) (fun (w' : FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j) => Eq.{max (succ u1) (succ u2)} (FreeProduct.Word.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.NeWord.toWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w') w))))
+but is expected to have type
+  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] (w : FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)), (Ne.{max (succ u2) (succ u1)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) w (FreeProduct.Word.empty.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) -> (Exists.{succ u2} ι (fun (i : ι) => Exists.{succ u2} ι (fun (j : ι) => Exists.{max (succ u2) (succ u1)} (FreeProduct.NeWord.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j) (fun (w' : FreeProduct.NeWord.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j) => Eq.{max (succ u2) (succ u1)} (FreeProduct.Word.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.NeWord.toWord.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w') w))))
+Case conversion may be inaccurate. Consider using '#align free_product.neword.of_word FreeProduct.NeWord.of_wordₓ'. -/
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
 /-- Every nonempty `word M` can be constructed as a `neword M i j` -/
-theorem of_word (w : Word M) (h : w ≠ Empty) : ∃ (i j : _)(w' : Neword M i j), w'.toWord = w :=
+theorem of_word (w : Word M) (h : w ≠ Empty) : ∃ (i j : _)(w' : NeWord M i j), w'.toWord = w :=
   by
   rsuffices ⟨i, j, w, h⟩ : ∃ (i j : _)(w' : neword M i j), w'.to_word.to_list = w.to_list
   · refine' ⟨i, j, w, _⟩
@@ -583,77 +775,145 @@ theorem of_word (w : Word M) (h : w ≠ Empty) : ∃ (i j : _)(w' : Neword M i j
       obtain rfl : y = ⟨i, w'.head⟩ := by simpa [hw'] using w'.to_list_head'
       refine' ⟨x.1, j, append (singleton x.2 hnot1.1) hchain.1 w', _⟩
       · simpa [to_word] using hw'
-#align free_product.neword.of_word FreeProduct.Neword.of_word
+#align free_product.neword.of_word FreeProduct.NeWord.of_word
 
+#print FreeProduct.NeWord.prod /-
 /-- A non-empty reduced word determines an element of the free product, given by multiplication. -/
-def prod {i j} (w : Neword M i j) :=
+def prod {i j} (w : NeWord M i j) :=
   w.toWord.Prod
-#align free_product.neword.prod FreeProduct.Neword.prod
+#align free_product.neword.prod FreeProduct.NeWord.prod
+-/
 
+/- warning: free_product.neword.singleton_head -> FreeProduct.NeWord.singleton_head is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} (x : M i) (hne_one : Ne.{succ u2} (M i) x (OfNat.ofNat.{u2} (M i) 1 (OfNat.mk.{u2} (M i) 1 (One.one.{u2} (M i) (MulOneClass.toHasOne.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))))))), Eq.{succ u2} (M i) (FreeProduct.NeWord.head.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i i (FreeProduct.NeWord.singleton.{u1, u2} ι M (fun {i : ι} => _inst_1 i) i x hne_one)) x
+but is expected to have type
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} (x : M i) (hne_one : Ne.{succ u2} (M i) x (OfNat.ofNat.{u2} (M i) 1 (One.toOfNat1.{u2} (M i) (Monoid.toOne.{u2} (M i) (_inst_1 i))))), Eq.{succ u2} (M i) (FreeProduct.NeWord.head.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i i (FreeProduct.NeWord.singleton.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i x hne_one)) x
+Case conversion may be inaccurate. Consider using '#align free_product.neword.singleton_head FreeProduct.NeWord.singleton_headₓ'. -/
 @[simp]
 theorem singleton_head {i} (x : M i) (hne_one : x ≠ 1) : (singleton x hne_one).headI = x :=
   rfl
-#align free_product.neword.singleton_head FreeProduct.Neword.singleton_head
-
+#align free_product.neword.singleton_head FreeProduct.NeWord.singleton_head
+
+/- warning: free_product.neword.singleton_last -> FreeProduct.NeWord.singleton_last is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} (x : M i) (hne_one : Ne.{succ u2} (M i) x (OfNat.ofNat.{u2} (M i) 1 (OfNat.mk.{u2} (M i) 1 (One.one.{u2} (M i) (MulOneClass.toHasOne.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))))))), Eq.{succ u2} (M i) (FreeProduct.NeWord.last.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i i (FreeProduct.NeWord.singleton.{u1, u2} ι M (fun {i : ι} => _inst_1 i) i x hne_one)) x
+but is expected to have type
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} (x : M i) (hne_one : Ne.{succ u2} (M i) x (OfNat.ofNat.{u2} (M i) 1 (One.toOfNat1.{u2} (M i) (Monoid.toOne.{u2} (M i) (_inst_1 i))))), Eq.{succ u2} (M i) (FreeProduct.NeWord.last.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i i (FreeProduct.NeWord.singleton.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i x hne_one)) x
+Case conversion may be inaccurate. Consider using '#align free_product.neword.singleton_last FreeProduct.NeWord.singleton_lastₓ'. -/
 @[simp]
 theorem singleton_last {i} (x : M i) (hne_one : x ≠ 1) : (singleton x hne_one).getLast = x :=
   rfl
-#align free_product.neword.singleton_last FreeProduct.Neword.singleton_last
-
+#align free_product.neword.singleton_last FreeProduct.NeWord.singleton_last
+
+/- warning: free_product.neword.prod_singleton -> FreeProduct.NeWord.prod_singleton is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} (x : M i) (hne_one : Ne.{succ u2} (M i) x (OfNat.ofNat.{u2} (M i) 1 (OfNat.mk.{u2} (M i) 1 (One.one.{u2} (M i) (MulOneClass.toHasOne.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))))))), Eq.{succ (max u1 u2)} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.NeWord.prod.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i i (FreeProduct.NeWord.singleton.{u1, u2} ι M (fun {i : ι} => _inst_1 i) i x hne_one)) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) x)
+but is expected to have type
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} (x : M i) (hne_one : Ne.{succ u2} (M i) x (OfNat.ofNat.{u2} (M i) 1 (One.toOfNat1.{u2} (M i) (Monoid.toOne.{u2} (M i) (_inst_1 i))))), Eq.{max (succ u1) (succ u2)} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.NeWord.prod.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i i (FreeProduct.NeWord.singleton.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i x hne_one)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, max (succ u2) (succ u1)} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, max u2 u1} (MonoidHom.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u2, max u2 u1} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) x)
+Case conversion may be inaccurate. Consider using '#align free_product.neword.prod_singleton FreeProduct.NeWord.prod_singletonₓ'. -/
 @[simp]
 theorem prod_singleton {i} (x : M i) (hne_one : x ≠ 1) : (singleton x hne_one).Prod = of x := by
   simp [to_word, Prod, word.prod]
-#align free_product.neword.prod_singleton FreeProduct.Neword.prod_singleton
-
+#align free_product.neword.prod_singleton FreeProduct.NeWord.prod_singleton
+
+/- warning: free_product.neword.append_head -> FreeProduct.NeWord.append_head is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} {j : ι} {k : ι} {l : ι} {w₁ : FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j} {hne : Ne.{succ u1} ι j k} {w₂ : FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) k l}, Eq.{succ u2} (M i) (FreeProduct.NeWord.head.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i l (FreeProduct.NeWord.append.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j k l w₁ hne w₂)) (FreeProduct.NeWord.head.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w₁)
+but is expected to have type
+  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] {i : ι} {j : ι} {k : ι} {l : ι} {w₁ : FreeProduct.NeWord.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j} {hne : Ne.{succ u2} ι j k} {w₂ : FreeProduct.NeWord.{u2, u1} ι M (fun (i : ι) => _inst_1 i) k l}, Eq.{succ u1} (M i) (FreeProduct.NeWord.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i l (FreeProduct.NeWord.append.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j k l w₁ hne w₂)) (FreeProduct.NeWord.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w₁)
+Case conversion may be inaccurate. Consider using '#align free_product.neword.append_head FreeProduct.NeWord.append_headₓ'. -/
 @[simp]
-theorem append_head {i j k l} {w₁ : Neword M i j} {hne : j ≠ k} {w₂ : Neword M k l} :
+theorem append_head {i j k l} {w₁ : NeWord M i j} {hne : j ≠ k} {w₂ : NeWord M k l} :
     (append w₁ hne w₂).headI = w₁.headI :=
   rfl
-#align free_product.neword.append_head FreeProduct.Neword.append_head
-
+#align free_product.neword.append_head FreeProduct.NeWord.append_head
+
+/- warning: free_product.neword.append_last -> FreeProduct.NeWord.append_last is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} {j : ι} {k : ι} {l : ι} {w₁ : FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j} {hne : Ne.{succ u1} ι j k} {w₂ : FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) k l}, Eq.{succ u2} (M l) (FreeProduct.NeWord.last.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i l (FreeProduct.NeWord.append.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j k l w₁ hne w₂)) (FreeProduct.NeWord.last.{u1, u2} ι M (fun (i : ι) => _inst_1 i) k l w₂)
+but is expected to have type
+  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] {i : ι} {j : ι} {k : ι} {l : ι} {w₁ : FreeProduct.NeWord.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j} {hne : Ne.{succ u2} ι j k} {w₂ : FreeProduct.NeWord.{u2, u1} ι M (fun (i : ι) => _inst_1 i) k l}, Eq.{succ u1} (M l) (FreeProduct.NeWord.last.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i l (FreeProduct.NeWord.append.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j k l w₁ hne w₂)) (FreeProduct.NeWord.last.{u2, u1} ι M (fun (i : ι) => _inst_1 i) k l w₂)
+Case conversion may be inaccurate. Consider using '#align free_product.neword.append_last FreeProduct.NeWord.append_lastₓ'. -/
 @[simp]
-theorem append_last {i j k l} {w₁ : Neword M i j} {hne : j ≠ k} {w₂ : Neword M k l} :
+theorem append_last {i j k l} {w₁ : NeWord M i j} {hne : j ≠ k} {w₂ : NeWord M k l} :
     (append w₁ hne w₂).getLast = w₂.getLast :=
   rfl
-#align free_product.neword.append_last FreeProduct.Neword.append_last
-
+#align free_product.neword.append_last FreeProduct.NeWord.append_last
+
+/- warning: free_product.neword.append_prod -> FreeProduct.NeWord.append_prod is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} {j : ι} {k : ι} {l : ι} {w₁ : FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j} {hne : Ne.{succ u1} ι j k} {w₂ : FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) k l}, Eq.{succ (max u1 u2)} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.NeWord.prod.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i l (FreeProduct.NeWord.append.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j k l w₁ hne w₂)) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instHMul.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toHasMul.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i))))) (FreeProduct.NeWord.prod.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w₁) (FreeProduct.NeWord.prod.{u1, u2} ι M (fun (i : ι) => _inst_1 i) k l w₂))
+but is expected to have type
+  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] {i : ι} {j : ι} {k : ι} {l : ι} {w₁ : FreeProduct.NeWord.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j} {hne : Ne.{succ u2} ι j k} {w₂ : FreeProduct.NeWord.{u2, u1} ι M (fun (i : ι) => _inst_1 i) k l}, Eq.{max (succ u2) (succ u1)} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.NeWord.prod.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i l (FreeProduct.NeWord.append.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j k l w₁ hne w₂)) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instHMul.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))))) (FreeProduct.NeWord.prod.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w₁) (FreeProduct.NeWord.prod.{u2, u1} ι M (fun (i : ι) => _inst_1 i) k l w₂))
+Case conversion may be inaccurate. Consider using '#align free_product.neword.append_prod FreeProduct.NeWord.append_prodₓ'. -/
 @[simp]
-theorem append_prod {i j k l} {w₁ : Neword M i j} {hne : j ≠ k} {w₂ : Neword M k l} :
+theorem append_prod {i j k l} {w₁ : NeWord M i j} {hne : j ≠ k} {w₂ : NeWord M k l} :
     (append w₁ hne w₂).Prod = w₁.Prod * w₂.Prod := by simp [to_word, Prod, word.prod]
-#align free_product.neword.append_prod FreeProduct.Neword.append_prod
-
+#align free_product.neword.append_prod FreeProduct.NeWord.append_prod
+
+/- warning: free_product.neword.replace_head -> FreeProduct.NeWord.replaceHead is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} {j : ι} (x : M i), (Ne.{succ u2} (M i) x (OfNat.ofNat.{u2} (M i) 1 (OfNat.mk.{u2} (M i) 1 (One.one.{u2} (M i) (MulOneClass.toHasOne.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))))))) -> (FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j) -> (FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j)
+but is expected to have type
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} {j : ι} (x : M i), (Ne.{succ u2} (M i) x (OfNat.ofNat.{u2} (M i) 1 (One.toOfNat1.{u2} (M i) (Monoid.toOne.{u2} (M i) (_inst_1 i))))) -> (FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j) -> (FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j)
+Case conversion may be inaccurate. Consider using '#align free_product.neword.replace_head FreeProduct.NeWord.replaceHeadₓ'. -/
 /-- One can replace the first letter in a non-empty reduced word by an element of the same
 group -/
-def replaceHead : ∀ {i j : ι} (x : M i) (hnotone : x ≠ 1) (w : Neword M i j), Neword M i j
+def replaceHead : ∀ {i j : ι} (x : M i) (hnotone : x ≠ 1) (w : NeWord M i j), NeWord M i j
   | _, _, x, h, singleton _ _ => singleton x h
   | _, _, x, h, append w₁ hne w₂ => append (replace_head x h w₁) hne w₂
-#align free_product.neword.replace_head FreeProduct.Neword.replaceHead
-
+#align free_product.neword.replace_head FreeProduct.NeWord.replaceHead
+
+/- warning: free_product.neword.replace_head_head -> FreeProduct.NeWord.replaceHead_head is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} {j : ι} (x : M i) (hnotone : Ne.{succ u2} (M i) x (OfNat.ofNat.{u2} (M i) 1 (OfNat.mk.{u2} (M i) 1 (One.one.{u2} (M i) (MulOneClass.toHasOne.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))))))) (w : FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j), Eq.{succ u2} (M i) (FreeProduct.NeWord.head.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j (FreeProduct.NeWord.replaceHead.{u1, u2} ι M (fun {i : ι} => _inst_1 i) i j x hnotone w)) x
+but is expected to have type
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} {j : ι} (x : M i) (hnotone : Ne.{succ u2} (M i) x (OfNat.ofNat.{u2} (M i) 1 (One.toOfNat1.{u2} (M i) (Monoid.toOne.{u2} (M i) (_inst_1 i))))) (w : FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j), Eq.{succ u2} (M i) (FreeProduct.NeWord.head.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j (FreeProduct.NeWord.replaceHead.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j x hnotone w)) x
+Case conversion may be inaccurate. Consider using '#align free_product.neword.replace_head_head FreeProduct.NeWord.replaceHead_headₓ'. -/
 @[simp]
-theorem replaceHead_head {i j : ι} (x : M i) (hnotone : x ≠ 1) (w : Neword M i j) :
+theorem replaceHead_head {i j : ι} (x : M i) (hnotone : x ≠ 1) (w : NeWord M i j) :
     (replaceHead x hnotone w).headI = x := by
   induction w
   rfl
   exact w_ih_w₁ _ _
-#align free_product.neword.replace_head_head FreeProduct.Neword.replaceHead_head
-
+#align free_product.neword.replace_head_head FreeProduct.NeWord.replaceHead_head
+
+/- warning: free_product.neword.mul_head -> FreeProduct.NeWord.mulHead is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j) (x : M i), (Ne.{succ u2} (M i) (HMul.hMul.{u2, u2, u2} (M i) (M i) (M i) (instHMul.{u2} (M i) (MulOneClass.toHasMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)))) x (FreeProduct.NeWord.head.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w)) (OfNat.ofNat.{u2} (M i) 1 (OfNat.mk.{u2} (M i) 1 (One.one.{u2} (M i) (MulOneClass.toHasOne.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))))))) -> (FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j)
+but is expected to have type
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j) (x : M i), (Ne.{succ u2} (M i) (HMul.hMul.{u2, u2, u2} (M i) (M i) (M i) (instHMul.{u2} (M i) (MulOneClass.toMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)))) x (FreeProduct.NeWord.head.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w)) (OfNat.ofNat.{u2} (M i) 1 (One.toOfNat1.{u2} (M i) (Monoid.toOne.{u2} (M i) (_inst_1 i))))) -> (FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j)
+Case conversion may be inaccurate. Consider using '#align free_product.neword.mul_head FreeProduct.NeWord.mulHeadₓ'. -/
 /-- One can multiply an element from the left to a non-empty reduced word if it does not cancel
 with the first element in the word. -/
-def mulHead {i j : ι} (w : Neword M i j) (x : M i) (hnotone : x * w.headI ≠ 1) : Neword M i j :=
+def mulHead {i j : ι} (w : NeWord M i j) (x : M i) (hnotone : x * w.headI ≠ 1) : NeWord M i j :=
   replaceHead (x * w.headI) hnotone w
-#align free_product.neword.mul_head FreeProduct.Neword.mulHead
-
+#align free_product.neword.mul_head FreeProduct.NeWord.mulHead
+
+/- warning: free_product.neword.mul_head_head -> FreeProduct.NeWord.mulHead_head is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j) (x : M i) (hnotone : Ne.{succ u2} (M i) (HMul.hMul.{u2, u2, u2} (M i) (M i) (M i) (instHMul.{u2} (M i) (MulOneClass.toHasMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)))) x (FreeProduct.NeWord.head.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w)) (OfNat.ofNat.{u2} (M i) 1 (OfNat.mk.{u2} (M i) 1 (One.one.{u2} (M i) (MulOneClass.toHasOne.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))))))), Eq.{succ u2} (M i) (FreeProduct.NeWord.head.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j (FreeProduct.NeWord.mulHead.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w x hnotone)) (HMul.hMul.{u2, u2, u2} (M i) (M i) (M i) (instHMul.{u2} (M i) (MulOneClass.toHasMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)))) x (FreeProduct.NeWord.head.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w))
+but is expected to have type
+  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j) (x : M i) (hnotone : Ne.{succ u1} (M i) (HMul.hMul.{u1, u1, u1} (M i) (M i) (M i) (instHMul.{u1} (M i) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)))) x (FreeProduct.NeWord.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w)) (OfNat.ofNat.{u1} (M i) 1 (One.toOfNat1.{u1} (M i) (Monoid.toOne.{u1} (M i) (_inst_1 i))))), Eq.{succ u1} (M i) (FreeProduct.NeWord.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j (FreeProduct.NeWord.mulHead.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w x hnotone)) (HMul.hMul.{u1, u1, u1} (M i) (M i) (M i) (instHMul.{u1} (M i) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)))) x (FreeProduct.NeWord.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w))
+Case conversion may be inaccurate. Consider using '#align free_product.neword.mul_head_head FreeProduct.NeWord.mulHead_headₓ'. -/
 @[simp]
-theorem mulHead_head {i j : ι} (w : Neword M i j) (x : M i) (hnotone : x * w.headI ≠ 1) :
+theorem mulHead_head {i j : ι} (w : NeWord M i j) (x : M i) (hnotone : x * w.headI ≠ 1) :
     (mulHead w x hnotone).headI = x * w.headI :=
   by
   induction w
   rfl
   exact w_ih_w₁ _ _
-#align free_product.neword.mul_head_head FreeProduct.Neword.mulHead_head
-
+#align free_product.neword.mul_head_head FreeProduct.NeWord.mulHead_head
+
+/- warning: free_product.neword.mul_head_prod -> FreeProduct.NeWord.mulHead_prod is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {M : ι -> Type.{u2}} [_inst_1 : forall (i : ι), Monoid.{u2} (M i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j) (x : M i) (hnotone : Ne.{succ u2} (M i) (HMul.hMul.{u2, u2, u2} (M i) (M i) (M i) (instHMul.{u2} (M i) (MulOneClass.toHasMul.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)))) x (FreeProduct.NeWord.head.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w)) (OfNat.ofNat.{u2} (M i) 1 (OfNat.mk.{u2} (M i) 1 (One.one.{u2} (M i) (MulOneClass.toHasOne.{u2} (M i) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i))))))), Eq.{succ (max u1 u2)} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.NeWord.prod.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j (FreeProduct.NeWord.mulHead.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w x hnotone)) (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (instHMul.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toHasMul.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i))))) (coeFn.{max (succ (max u1 u2)) (succ u2), max (succ u2) (succ (max u1 u2))} (MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (fun (_x : MonoidHom.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) => (M i) -> (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.hasCoeToFun.{u2, max u1 u2} (M i) (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u2} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u1 u2} (FreeProduct.{u1, u2} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.monoid.{u1, u2} ι M (fun (i : ι) => _inst_1 i)))) (FreeProduct.of.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i) x) (FreeProduct.NeWord.prod.{u1, u2} ι M (fun (i : ι) => _inst_1 i) i j w))
+but is expected to have type
+  forall {ι : Type.{u2}} {M : ι -> Type.{u1}} [_inst_1 : forall (i : ι), Monoid.{u1} (M i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j) (x : M i) (hnotone : Ne.{succ u1} (M i) (HMul.hMul.{u1, u1, u1} (M i) (M i) (M i) (instHMul.{u1} (M i) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)))) x (FreeProduct.NeWord.head.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w)) (OfNat.ofNat.{u1} (M i) 1 (One.toOfNat1.{u1} (M i) (Monoid.toOne.{u1} (M i) (_inst_1 i))))), Eq.{max (succ u2) (succ u1)} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (FreeProduct.NeWord.prod.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j (FreeProduct.NeWord.mulHead.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w x hnotone)) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) x) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) x) (instHMul.{max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) x) (MulOneClass.toMul.{max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) x) (Monoid.toMulOneClass.{max u2 u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) x) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))))) (FunLike.coe.{max (succ u1) (succ u2), succ u1, max (succ u1) (succ u2)} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (fun (_x : M i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M i) => FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) _x) (MulHomClass.toFunLike.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (MulOneClass.toMul.{u1} (M i) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i))) (MulOneClass.toMul.{max u1 u2} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, max u1 u2} (MonoidHom.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))) (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i))) (MonoidHom.monoidHomClass.{u1, max u1 u2} (M i) (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (Monoid.toMulOneClass.{u1} (M i) (_inst_1 i)) (Monoid.toMulOneClass.{max u2 u1} (FreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)) (instMonoidFreeProduct.{u2, u1} ι M (fun (i : ι) => _inst_1 i)))))) (FreeProduct.of.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i) x) (FreeProduct.NeWord.prod.{u2, u1} ι M (fun (i : ι) => _inst_1 i) i j w))
+Case conversion may be inaccurate. Consider using '#align free_product.neword.mul_head_prod FreeProduct.NeWord.mulHead_prodₓ'. -/
 @[simp]
-theorem mulHead_prod {i j : ι} (w : Neword M i j) (x : M i) (hnotone : x * w.headI ≠ 1) :
+theorem mulHead_prod {i j : ι} (w : NeWord M i j) (x : M i) (hnotone : x * w.headI ≠ 1) :
     (mulHead w x hnotone).Prod = of x * w.Prod :=
   by
   unfold mul_head
@@ -663,32 +923,52 @@ theorem mulHead_prod {i j : ι} (w : Neword M i j) (x : M i) (hnotone : x * w.he
     clear w_ih_w₂
     simp [replace_head, ← mul_assoc] at *
     congr 1
-#align free_product.neword.mul_head_prod FreeProduct.Neword.mulHead_prod
+#align free_product.neword.mul_head_prod FreeProduct.NeWord.mulHead_prod
 
 section Group
 
 variable {G : ι → Type _} [∀ i, Group (G i)]
 
+#print FreeProduct.NeWord.inv /-
 /-- The inverse of a non-empty reduced word -/
-def inv : ∀ {i j} (w : Neword G i j), Neword G j i
+def inv : ∀ {i j} (w : NeWord G i j), NeWord G j i
   | _, _, singleton x h => singleton x⁻¹ (mt inv_eq_one.mp h)
   | _, _, append w₁ h w₂ => append w₂.inv h.symm w₁.inv
-#align free_product.neword.inv FreeProduct.Neword.inv
+#align free_product.neword.inv FreeProduct.NeWord.inv
+-/
 
+/- warning: free_product.neword.inv_prod -> FreeProduct.NeWord.inv_prod is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {G : ι -> Type.{u2}} [_inst_3 : forall (i : ι), Group.{u2} (G i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) i j), Eq.{succ (max u1 u2)} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.NeWord.prod.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) j i (FreeProduct.NeWord.inv.{u1, u2} ι G (fun (i : ι) => _inst_3 i) i j w)) (Inv.inv.{max u1 u2} (FreeProduct.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i)))) (FreeProduct.hasInv.{u1, u2} ι G (fun (i : ι) => _inst_3 i)) (FreeProduct.NeWord.prod.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) i j w))
+but is expected to have type
+  forall {ι : Type.{u2}} {G : ι -> Type.{u1}} [_inst_3 : forall (i : ι), Group.{u1} (G i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i j), Eq.{max (succ u2) (succ u1)} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (FreeProduct.NeWord.prod.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) j i (FreeProduct.NeWord.inv.{u2, u1} ι G (fun (i : ι) => _inst_3 i) i j w)) (Inv.inv.{max u2 u1} (FreeProduct.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i)))) (FreeProduct.instInvFreeProductToMonoidToDivInvMonoid.{u2, u1} ι G (fun (i : ι) => _inst_3 i)) (FreeProduct.NeWord.prod.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i j w))
+Case conversion may be inaccurate. Consider using '#align free_product.neword.inv_prod FreeProduct.NeWord.inv_prodₓ'. -/
 @[simp]
-theorem inv_prod {i j} (w : Neword G i j) : w.inv.Prod = w.Prod⁻¹ := by
+theorem inv_prod {i j} (w : NeWord G i j) : w.inv.Prod = w.Prod⁻¹ := by
   induction w <;> simp [inv, *]
-#align free_product.neword.inv_prod FreeProduct.Neword.inv_prod
-
+#align free_product.neword.inv_prod FreeProduct.NeWord.inv_prod
+
+/- warning: free_product.neword.inv_head -> FreeProduct.NeWord.inv_head is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {G : ι -> Type.{u2}} [_inst_3 : forall (i : ι), Group.{u2} (G i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) i j), Eq.{succ u2} (G j) (FreeProduct.NeWord.head.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) j i (FreeProduct.NeWord.inv.{u1, u2} ι G (fun (i : ι) => _inst_3 i) i j w)) (Inv.inv.{u2} (G j) (DivInvMonoid.toHasInv.{u2} (G j) (Group.toDivInvMonoid.{u2} (G j) (_inst_3 j))) (FreeProduct.NeWord.last.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) i j w))
+but is expected to have type
+  forall {ι : Type.{u2}} {G : ι -> Type.{u1}} [_inst_3 : forall (i : ι), Group.{u1} (G i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i j), Eq.{succ u1} (G j) (FreeProduct.NeWord.head.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) j i (FreeProduct.NeWord.inv.{u2, u1} ι G (fun (i : ι) => _inst_3 i) i j w)) (Inv.inv.{u1} (G j) (InvOneClass.toInv.{u1} (G j) (DivInvOneMonoid.toInvOneClass.{u1} (G j) (DivisionMonoid.toDivInvOneMonoid.{u1} (G j) (Group.toDivisionMonoid.{u1} (G j) (_inst_3 j))))) (FreeProduct.NeWord.last.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i j w))
+Case conversion may be inaccurate. Consider using '#align free_product.neword.inv_head FreeProduct.NeWord.inv_headₓ'. -/
 @[simp]
-theorem inv_head {i j} (w : Neword G i j) : w.inv.headI = w.getLast⁻¹ := by
+theorem inv_head {i j} (w : NeWord G i j) : w.inv.headI = w.getLast⁻¹ := by
   induction w <;> simp [inv, *]
-#align free_product.neword.inv_head FreeProduct.Neword.inv_head
-
+#align free_product.neword.inv_head FreeProduct.NeWord.inv_head
+
+/- warning: free_product.neword.inv_last -> FreeProduct.NeWord.inv_last is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {G : ι -> Type.{u2}} [_inst_3 : forall (i : ι), Group.{u2} (G i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) i j), Eq.{succ u2} (G i) (FreeProduct.NeWord.last.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) j i (FreeProduct.NeWord.inv.{u1, u2} ι G (fun (i : ι) => _inst_3 i) i j w)) (Inv.inv.{u2} (G i) (DivInvMonoid.toHasInv.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) (FreeProduct.NeWord.head.{u1, u2} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (G i) (Group.toDivInvMonoid.{u2} (G i) (_inst_3 i))) i j w))
+but is expected to have type
+  forall {ι : Type.{u2}} {G : ι -> Type.{u1}} [_inst_3 : forall (i : ι), Group.{u1} (G i)] {i : ι} {j : ι} (w : FreeProduct.NeWord.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i j), Eq.{succ u1} (G i) (FreeProduct.NeWord.last.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) j i (FreeProduct.NeWord.inv.{u2, u1} ι G (fun (i : ι) => _inst_3 i) i j w)) (Inv.inv.{u1} (G i) (InvOneClass.toInv.{u1} (G i) (DivInvOneMonoid.toInvOneClass.{u1} (G i) (DivisionMonoid.toDivInvOneMonoid.{u1} (G i) (Group.toDivisionMonoid.{u1} (G i) (_inst_3 i))))) (FreeProduct.NeWord.head.{u2, u1} ι G (fun (i : ι) => DivInvMonoid.toMonoid.{u1} (G i) (Group.toDivInvMonoid.{u1} (G i) (_inst_3 i))) i j w))
+Case conversion may be inaccurate. Consider using '#align free_product.neword.inv_last FreeProduct.NeWord.inv_lastₓ'. -/
 @[simp]
-theorem inv_last {i j} (w : Neword G i j) : w.inv.getLast = w.headI⁻¹ := by
+theorem inv_last {i j} (w : NeWord G i j) : w.inv.getLast = w.headI⁻¹ := by
   induction w <;> simp [inv, *]
-#align free_product.neword.inv_last FreeProduct.Neword.inv_last
+#align free_product.neword.inv_last FreeProduct.NeWord.inv_last
 
 end Group
 
@@ -724,7 +1004,13 @@ variable (hpp : Pairwise fun i j => ∀ h : H i, h ≠ 1 → f i h • X j ⊆ X
 
 include hpp
 
-theorem lift_word_ping_pong {i j k} (w : Neword H i j) (hk : j ≠ k) : lift f w.Prod • X k ⊆ X i :=
+/- warning: free_product.lift_word_ping_pong -> FreeProduct.lift_word_ping_pong is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {G : Type.{u2}} [_inst_3 : Group.{u2} G] {H : ι -> Type.{u3}} [_inst_4 : forall (i : ι), Group.{u3} (H i)] (f : forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) {α : Type.{u4}} [_inst_5 : MulAction.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))] (X : ι -> (Set.{u4} α)), (Pairwise.{u1} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u3} (H i) h (OfNat.ofNat.{u3} (H i) 1 (OfNat.mk.{u3} (H i) 1 (One.one.{u3} (H i) (MulOneClass.toHasOne.{u3} (H i) (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.hasSubset.{u4} α) (SMul.smul.{u2, u4} G (Set.{u4} α) (Set.smulSet.{u2, u4} G α (MulAction.toHasSmul.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)) _inst_5)) (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (H i) -> G) (MonoidHom.hasCoeToFun.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} {j : ι} {k : ι} (w : FreeProduct.NeWord.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j), (Ne.{succ u1} ι j k) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.hasSubset.{u4} α) (SMul.smul.{u2, u4} G (Set.{u4} α) (Set.smulSet.{u2, u4} G α (MulAction.toHasSmul.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)) _inst_5)) (coeFn.{max (succ u2) (succ (max u1 u3)), max (succ (max u1 u3)) (succ u2)} (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) -> G) (MonoidHom.hasCoeToFun.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (coeFn.{max 1 (max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))) (max (succ u2) (succ (max u1 u3))) (succ u1) (succ u2) (succ u3), max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))} (Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (fun (_x : Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) => (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) -> (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (FreeProduct.lift.{u1, u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) f) (FreeProduct.NeWord.prod.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) (X k)) (X i)))
+but is expected to have type
+  forall {ι : Type.{u4}} {G : Type.{u1}} [_inst_3 : Group.{u1} G] {H : ι -> Type.{u3}} [_inst_4 : forall (i : ι), Group.{u3} (H i)] (f : forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) {α : Type.{u2}} [_inst_5 : MulAction.{u1, u2} G α (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))] (X : ι -> (Set.{u2} α)), (Pairwise.{u4} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u3} (H i) h (OfNat.ofNat.{u3} (H i) 1 (One.toOfNat1.{u3} (H i) (InvOneClass.toOne.{u3} (H i) (DivInvOneMonoid.toInvOneClass.{u3} (H i) (DivisionMonoid.toDivInvOneMonoid.{u3} (H i) (Group.toDivisionMonoid.{u3} (H i) (_inst_4 i)))))))) -> (HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) (HSMul.hSMul.{u1, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Set.{u2} α) (Set.{u2} α) (instHSMul.{u1, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Set.{u2} α) (Set.smulSet.{u1, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) α (MulAction.toSMul.{u1, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) α (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) _inst_3)) _inst_5))) (FunLike.coe.{max (succ u1) (succ u3), succ u3, succ u1} (MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) (fun (_x : H i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) _x) (MulHomClass.toFunLike.{max u1 u3, u3, u1} (MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (MulOneClass.toMul.{u3} (H i) (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u3, u3, u1} (MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} {j : ι} {k : ι} (w : FreeProduct.NeWord.{u4, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j), (Ne.{succ u4} ι j k) -> (HasSubset.Subset.{u2} (Set.{u2} α) (Set.instHasSubsetSet.{u2} α) (HSMul.hSMul.{u1, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u4, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) (Set.{u2} α) (Set.{u2} α) (instHSMul.{u1, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u4, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) (Set.{u2} α) (Set.smulSet.{u1, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u4, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) α (MulAction.toSMul.{u1, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u4, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) α (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u4, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u4, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) _inst_3)) _inst_5))) (FunLike.coe.{max (max (succ u4) (succ u1)) (succ u3), max (succ u4) (succ u3), succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u3 u4, u1} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (fun (_x : FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) => G) _x) (MulHomClass.toFunLike.{max (max u4 u1) u3, max u4 u3, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u3 u4, u1} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (MulOneClass.toMul.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max (max u4 u1) u3, max u4 u3, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u3 u4, u1} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{max u4 u3, u1} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (FunLike.coe.{max (max (succ u1) (succ u3)) (succ u4), max (max (succ u1) (succ u3)) (succ u4), max (max (succ u1) (succ u3)) (succ u4)} (Equiv.{max (max (succ u4) (succ u3)) (succ u1), max (succ u1) (succ (max u3 u4))} (forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u3 u4, u1} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (fun (_x : forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u3 u4, u1} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) _x) (Equiv.instFunLikeEquiv.{max (max (succ u1) (succ u3)) (succ u4), max (max (succ u1) (succ u3)) (succ u4)} (forall (i : ι), MonoidHom.{u3, u1} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u3 u4, u1} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u4 u3} (FreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u4, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (FreeProduct.lift.{u4, u3, u1} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) f) (FreeProduct.NeWord.prod.{u4, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) (X k)) (X i)))
+Case conversion may be inaccurate. Consider using '#align free_product.lift_word_ping_pong FreeProduct.lift_word_ping_pongₓ'. -/
+theorem lift_word_ping_pong {i j k} (w : NeWord H i j) (hk : j ≠ k) : lift f w.Prod • X k ⊆ X i :=
   by
   rename' i => i', j => j', k => m, hk => hm
   induction' w with i x hne_one i j k l w₁ hne w₂ hIw₁ hIw₂ generalizing m <;> clear i' j'
@@ -740,7 +1026,13 @@ theorem lift_word_ping_pong {i j k} (w : Neword H i j) (hk : j ≠ k) : lift f w
 
 include X hXnonempty hXdisj
 
-theorem lift_word_prod_nontrivial_of_other_i {i j k} (w : Neword H i j) (hhead : k ≠ i)
+/- warning: free_product.lift_word_prod_nontrivial_of_other_i -> FreeProduct.lift_word_prod_nontrivial_of_other_i is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} {G : Type.{u2}} [_inst_3 : Group.{u2} G] {H : ι -> Type.{u3}} [_inst_4 : forall (i : ι), Group.{u3} (H i)] (f : forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) {α : Type.{u4}} [_inst_5 : MulAction.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.completeBooleanAlgebra.{u4} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u4} (Set.{u4} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u4} (Set.{u4} α) (Set.booleanAlgebra.{u4} α))) (X i) (X j))) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u3} (H i) h (OfNat.ofNat.{u3} (H i) 1 (OfNat.mk.{u3} (H i) 1 (One.one.{u3} (H i) (MulOneClass.toHasOne.{u3} (H i) (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.hasSubset.{u4} α) (SMul.smul.{u2, u4} G (Set.{u4} α) (Set.smulSet.{u2, u4} G α (MulAction.toHasSmul.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)) _inst_5)) (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (H i) -> G) (MonoidHom.hasCoeToFun.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} {j : ι} {k : ι} (w : FreeProduct.NeWord.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j), (Ne.{succ u1} ι k i) -> (Ne.{succ u1} ι k j) -> (Ne.{succ u2} G (coeFn.{max (succ u2) (succ (max u1 u3)), max (succ (max u1 u3)) (succ u2)} (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) -> G) (MonoidHom.hasCoeToFun.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (coeFn.{max 1 (max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))) (max (succ u2) (succ (max u1 u3))) (succ u1) (succ u2) (succ u3), max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))} (Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (fun (_x : Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) => (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) -> (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (FreeProduct.lift.{u1, u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) f) (FreeProduct.NeWord.prod.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) (OfNat.ofNat.{u2} G 1 (OfNat.mk.{u2} G 1 (One.one.{u2} G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))))))))
+but is expected to have type
+  forall {ι : Type.{u3}} {G : Type.{u1}} [_inst_3 : Group.{u1} G] {H : ι -> Type.{u2}} [_inst_4 : forall (i : ι), Group.{u2} (H i)] (f : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) {α : Type.{u4}} [_inst_5 : MulAction.{u1, u4} G α (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (BoundedOrder.toOrderBot.{u4} (Set.{u4} α) (Preorder.toLE.{u4} (Set.{u4} α) (PartialOrder.toPreorder.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))))) (CompleteLattice.toBoundedOrder.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (X i) (X j))) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u2} (H i) h (OfNat.ofNat.{u2} (H i) 1 (One.toOfNat1.{u2} (H i) (InvOneClass.toOne.{u2} (H i) (DivInvOneMonoid.toInvOneClass.{u2} (H i) (DivisionMonoid.toDivInvOneMonoid.{u2} (H i) (Group.toDivisionMonoid.{u2} (H i) (_inst_4 i)))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.instHasSubsetSet.{u4} α) (HSMul.hSMul.{u1, u4, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Set.{u4} α) (Set.{u4} α) (instHSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Set.{u4} α) (Set.smulSet.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) α (MulAction.toSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) α (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) _inst_3)) _inst_5))) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) (fun (_x : H i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) _x) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (MulOneClass.toMul.{u2} (H i) (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} {j : ι} {k : ι} (w : FreeProduct.NeWord.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j), (Ne.{succ u3} ι k i) -> (Ne.{succ u3} ι k j) -> (Ne.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (FunLike.coe.{max (max (succ u3) (succ u1)) (succ u2), max (succ u3) (succ u2), succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (fun (_x : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) _x) (MulHomClass.toFunLike.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (MulOneClass.toMul.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{max u3 u2, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (Equiv.{max (max (succ u3) (succ u2)) (succ u1), max (succ u1) (succ (max u2 u3))} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (fun (_x : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) _x) (Equiv.instFunLikeEquiv.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (FreeProduct.lift.{u3, u2, u1} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) f) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (InvOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (Group.toDivisionMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) _inst_3))))))))
+Case conversion may be inaccurate. Consider using '#align free_product.lift_word_prod_nontrivial_of_other_i FreeProduct.lift_word_prod_nontrivial_of_other_iₓ'. -/
+theorem lift_word_prod_nontrivial_of_other_i {i j k} (w : NeWord H i j) (hhead : k ≠ i)
     (hlast : k ≠ j) : lift f w.Prod ≠ 1 := by
   intro heq1
   have : X k ⊆ X i := by simpa [heq1] using lift_word_ping_pong f X hpp w hlast.symm
@@ -750,13 +1042,25 @@ theorem lift_word_prod_nontrivial_of_other_i {i j k} (w : Neword H i j) (hhead :
 
 include hnontriv
 
-theorem lift_word_prod_nontrivial_of_head_eq_last {i} (w : Neword H i i) : lift f w.Prod ≠ 1 :=
+/- warning: free_product.lift_word_prod_nontrivial_of_head_eq_last -> FreeProduct.lift_word_prod_nontrivial_of_head_eq_last is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} [hnontriv : Nontrivial.{u1} ι] {G : Type.{u2}} [_inst_3 : Group.{u2} G] {H : ι -> Type.{u3}} [_inst_4 : forall (i : ι), Group.{u3} (H i)] (f : forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) {α : Type.{u4}} [_inst_5 : MulAction.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.completeBooleanAlgebra.{u4} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u4} (Set.{u4} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u4} (Set.{u4} α) (Set.booleanAlgebra.{u4} α))) (X i) (X j))) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u3} (H i) h (OfNat.ofNat.{u3} (H i) 1 (OfNat.mk.{u3} (H i) 1 (One.one.{u3} (H i) (MulOneClass.toHasOne.{u3} (H i) (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.hasSubset.{u4} α) (SMul.smul.{u2, u4} G (Set.{u4} α) (Set.smulSet.{u2, u4} G α (MulAction.toHasSmul.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)) _inst_5)) (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (H i) -> G) (MonoidHom.hasCoeToFun.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} (w : FreeProduct.NeWord.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i i), Ne.{succ u2} G (coeFn.{max (succ u2) (succ (max u1 u3)), max (succ (max u1 u3)) (succ u2)} (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) -> G) (MonoidHom.hasCoeToFun.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (coeFn.{max 1 (max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))) (max (succ u2) (succ (max u1 u3))) (succ u1) (succ u2) (succ u3), max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))} (Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (fun (_x : Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) => (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) -> (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (FreeProduct.lift.{u1, u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) f) (FreeProduct.NeWord.prod.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i i w)) (OfNat.ofNat.{u2} G 1 (OfNat.mk.{u2} G 1 (One.one.{u2} G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))))))
+but is expected to have type
+  forall {ι : Type.{u3}} [hnontriv : Nontrivial.{u3} ι] {G : Type.{u1}} [_inst_3 : Group.{u1} G] {H : ι -> Type.{u2}} [_inst_4 : forall (i : ι), Group.{u2} (H i)] (f : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) {α : Type.{u4}} [_inst_5 : MulAction.{u1, u4} G α (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (BoundedOrder.toOrderBot.{u4} (Set.{u4} α) (Preorder.toLE.{u4} (Set.{u4} α) (PartialOrder.toPreorder.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))))) (CompleteLattice.toBoundedOrder.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (X i) (X j))) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u2} (H i) h (OfNat.ofNat.{u2} (H i) 1 (One.toOfNat1.{u2} (H i) (InvOneClass.toOne.{u2} (H i) (DivInvOneMonoid.toInvOneClass.{u2} (H i) (DivisionMonoid.toDivInvOneMonoid.{u2} (H i) (Group.toDivisionMonoid.{u2} (H i) (_inst_4 i)))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.instHasSubsetSet.{u4} α) (HSMul.hSMul.{u1, u4, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Set.{u4} α) (Set.{u4} α) (instHSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Set.{u4} α) (Set.smulSet.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) α (MulAction.toSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) α (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) _inst_3)) _inst_5))) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) (fun (_x : H i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) _x) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (MulOneClass.toMul.{u2} (H i) (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} (w : FreeProduct.NeWord.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i), Ne.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i w)) (FunLike.coe.{max (max (succ u3) (succ u1)) (succ u2), max (succ u3) (succ u2), succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (fun (_x : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) _x) (MulHomClass.toFunLike.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (MulOneClass.toMul.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{max u3 u2, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (Equiv.{max (max (succ u3) (succ u2)) (succ u1), max (succ u1) (succ (max u2 u3))} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (fun (_x : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) _x) (Equiv.instFunLikeEquiv.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (FreeProduct.lift.{u3, u2, u1} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) f) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i w)) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i w)) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i w)) (InvOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i w)) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i w)) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i w)) (Group.toDivisionMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i i w)) _inst_3)))))))
+Case conversion may be inaccurate. Consider using '#align free_product.lift_word_prod_nontrivial_of_head_eq_last FreeProduct.lift_word_prod_nontrivial_of_head_eq_lastₓ'. -/
+theorem lift_word_prod_nontrivial_of_head_eq_last {i} (w : NeWord H i i) : lift f w.Prod ≠ 1 :=
   by
   obtain ⟨k, hk⟩ := exists_ne i
   exact lift_word_prod_nontrivial_of_other_i f X hXnonempty hXdisj hpp w hk hk
 #align free_product.lift_word_prod_nontrivial_of_head_eq_last FreeProduct.lift_word_prod_nontrivial_of_head_eq_last
 
-theorem lift_word_prod_nontrivial_of_head_card {i j} (w : Neword H i j) (hcard : 3 ≤ (#H i))
+/- warning: free_product.lift_word_prod_nontrivial_of_head_card -> FreeProduct.lift_word_prod_nontrivial_of_head_card is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} [hnontriv : Nontrivial.{u1} ι] {G : Type.{u2}} [_inst_3 : Group.{u2} G] {H : ι -> Type.{u3}} [_inst_4 : forall (i : ι), Group.{u3} (H i)] (f : forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) {α : Type.{u4}} [_inst_5 : MulAction.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.completeBooleanAlgebra.{u4} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u4} (Set.{u4} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u4} (Set.{u4} α) (Set.booleanAlgebra.{u4} α))) (X i) (X j))) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u3} (H i) h (OfNat.ofNat.{u3} (H i) 1 (OfNat.mk.{u3} (H i) 1 (One.one.{u3} (H i) (MulOneClass.toHasOne.{u3} (H i) (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.hasSubset.{u4} α) (SMul.smul.{u2, u4} G (Set.{u4} α) (Set.smulSet.{u2, u4} G α (MulAction.toHasSmul.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)) _inst_5)) (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (H i) -> G) (MonoidHom.hasCoeToFun.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} {j : ι} (w : FreeProduct.NeWord.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j), (LE.le.{succ u3} Cardinal.{u3} Cardinal.hasLe.{u3} (OfNat.ofNat.{succ u3} Cardinal.{u3} 3 (OfNat.mk.{succ u3} Cardinal.{u3} 3 (bit1.{succ u3} Cardinal.{u3} Cardinal.hasOne.{u3} Cardinal.hasAdd.{u3} (One.one.{succ u3} Cardinal.{u3} Cardinal.hasOne.{u3})))) (Cardinal.mk.{u3} (H i))) -> (Ne.{succ u1} ι i j) -> (Ne.{succ u2} G (coeFn.{max (succ u2) (succ (max u1 u3)), max (succ (max u1 u3)) (succ u2)} (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) -> G) (MonoidHom.hasCoeToFun.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (coeFn.{max 1 (max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))) (max (succ u2) (succ (max u1 u3))) (succ u1) (succ u2) (succ u3), max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))} (Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (fun (_x : Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) => (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) -> (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (FreeProduct.lift.{u1, u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) f) (FreeProduct.NeWord.prod.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) (OfNat.ofNat.{u2} G 1 (OfNat.mk.{u2} G 1 (One.one.{u2} G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))))))))
+but is expected to have type
+  forall {ι : Type.{u3}} [hnontriv : Nontrivial.{u3} ι] {G : Type.{u1}} [_inst_3 : Group.{u1} G] {H : ι -> Type.{u2}} [_inst_4 : forall (i : ι), Group.{u2} (H i)] (f : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) {α : Type.{u4}} [_inst_5 : MulAction.{u1, u4} G α (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (BoundedOrder.toOrderBot.{u4} (Set.{u4} α) (Preorder.toLE.{u4} (Set.{u4} α) (PartialOrder.toPreorder.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))))) (CompleteLattice.toBoundedOrder.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (X i) (X j))) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u2} (H i) h (OfNat.ofNat.{u2} (H i) 1 (One.toOfNat1.{u2} (H i) (InvOneClass.toOne.{u2} (H i) (DivInvOneMonoid.toInvOneClass.{u2} (H i) (DivisionMonoid.toDivInvOneMonoid.{u2} (H i) (Group.toDivisionMonoid.{u2} (H i) (_inst_4 i)))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.instHasSubsetSet.{u4} α) (HSMul.hSMul.{u1, u4, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Set.{u4} α) (Set.{u4} α) (instHSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Set.{u4} α) (Set.smulSet.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) α (MulAction.toSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) α (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) _inst_3)) _inst_5))) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) (fun (_x : H i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) _x) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (MulOneClass.toMul.{u2} (H i) (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} {j : ι} (w : FreeProduct.NeWord.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j), (LE.le.{succ u2} Cardinal.{u2} Cardinal.instLECardinal.{u2} (OfNat.ofNat.{succ u2} Cardinal.{u2} 3 (instOfNat.{succ u2} Cardinal.{u2} 3 Cardinal.instNatCastCardinal.{u2} (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))) (Cardinal.mk.{u2} (H i))) -> (Ne.{succ u3} ι i j) -> (Ne.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (FunLike.coe.{max (max (succ u3) (succ u1)) (succ u2), max (succ u3) (succ u2), succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (fun (_x : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) _x) (MulHomClass.toFunLike.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (MulOneClass.toMul.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{max u3 u2, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (Equiv.{max (max (succ u3) (succ u2)) (succ u1), max (succ u1) (succ (max u2 u3))} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (fun (_x : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) _x) (Equiv.instFunLikeEquiv.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (FreeProduct.lift.{u3, u2, u1} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) f) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (InvOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (Group.toDivisionMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) _inst_3))))))))
+Case conversion may be inaccurate. Consider using '#align free_product.lift_word_prod_nontrivial_of_head_card FreeProduct.lift_word_prod_nontrivial_of_head_cardₓ'. -/
+theorem lift_word_prod_nontrivial_of_head_card {i j} (w : NeWord H i j) (hcard : 3 ≤ (#H i))
     (hheadtail : i ≠ j) : lift f w.Prod ≠ 1 :=
   by
   obtain ⟨h, hn1, hnh⟩ := Cardinal.three_le hcard 1 w.head⁻¹
@@ -775,7 +1079,13 @@ theorem lift_word_prod_nontrivial_of_head_card {i j} (w : Neword H i j) (hcard :
 
 include hcard
 
-theorem lift_word_prod_nontrivial_of_not_empty {i j} (w : Neword H i j) : lift f w.Prod ≠ 1 := by
+/- warning: free_product.lift_word_prod_nontrivial_of_not_empty -> FreeProduct.lift_word_prod_nontrivial_of_not_empty is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} [hnontriv : Nontrivial.{u1} ι] {G : Type.{u2}} [_inst_3 : Group.{u2} G] {H : ι -> Type.{u3}} [_inst_4 : forall (i : ι), Group.{u3} (H i)] (f : forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))), (Or (LE.le.{succ u1} Cardinal.{u1} Cardinal.hasLe.{u1} (OfNat.ofNat.{succ u1} Cardinal.{u1} 3 (OfNat.mk.{succ u1} Cardinal.{u1} 3 (bit1.{succ u1} Cardinal.{u1} Cardinal.hasOne.{u1} Cardinal.hasAdd.{u1} (One.one.{succ u1} Cardinal.{u1} Cardinal.hasOne.{u1})))) (Cardinal.mk.{u1} ι)) (Exists.{succ u1} ι (fun (i : ι) => LE.le.{succ u3} Cardinal.{u3} Cardinal.hasLe.{u3} (OfNat.ofNat.{succ u3} Cardinal.{u3} 3 (OfNat.mk.{succ u3} Cardinal.{u3} 3 (bit1.{succ u3} Cardinal.{u3} Cardinal.hasOne.{u3} Cardinal.hasAdd.{u3} (One.one.{succ u3} Cardinal.{u3} Cardinal.hasOne.{u3})))) (Cardinal.mk.{u3} (H i))))) -> (forall {α : Type.{u4}} [_inst_5 : MulAction.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.completeBooleanAlgebra.{u4} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u4} (Set.{u4} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u4} (Set.{u4} α) (Set.booleanAlgebra.{u4} α))) (X i) (X j))) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u3} (H i) h (OfNat.ofNat.{u3} (H i) 1 (OfNat.mk.{u3} (H i) 1 (One.one.{u3} (H i) (MulOneClass.toHasOne.{u3} (H i) (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.hasSubset.{u4} α) (SMul.smul.{u2, u4} G (Set.{u4} α) (Set.smulSet.{u2, u4} G α (MulAction.toHasSmul.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)) _inst_5)) (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (H i) -> G) (MonoidHom.hasCoeToFun.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} {j : ι} (w : FreeProduct.NeWord.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j), Ne.{succ u2} G (coeFn.{max (succ u2) (succ (max u1 u3)), max (succ (max u1 u3)) (succ u2)} (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) -> G) (MonoidHom.hasCoeToFun.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (coeFn.{max 1 (max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))) (max (succ u2) (succ (max u1 u3))) (succ u1) (succ u2) (succ u3), max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))} (Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (fun (_x : Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) => (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) -> (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (FreeProduct.lift.{u1, u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) f) (FreeProduct.NeWord.prod.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) i j w)) (OfNat.ofNat.{u2} G 1 (OfNat.mk.{u2} G 1 (One.one.{u2} G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))))))))
+but is expected to have type
+  forall {ι : Type.{u3}} [hnontriv : Nontrivial.{u3} ι] {G : Type.{u1}} [_inst_3 : Group.{u1} G] {H : ι -> Type.{u2}} [_inst_4 : forall (i : ι), Group.{u2} (H i)] (f : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))), (Or (LE.le.{succ u3} Cardinal.{u3} Cardinal.instLECardinal.{u3} (OfNat.ofNat.{succ u3} Cardinal.{u3} 3 (instOfNat.{succ u3} Cardinal.{u3} 3 Cardinal.instNatCastCardinal.{u3} (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))) (Cardinal.mk.{u3} ι)) (Exists.{succ u3} ι (fun (i : ι) => LE.le.{succ u2} Cardinal.{u2} Cardinal.instLECardinal.{u2} (OfNat.ofNat.{succ u2} Cardinal.{u2} 3 (instOfNat.{succ u2} Cardinal.{u2} 3 Cardinal.instNatCastCardinal.{u2} (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))) (Cardinal.mk.{u2} (H i))))) -> (forall {α : Type.{u4}} [_inst_5 : MulAction.{u1, u4} G α (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (BoundedOrder.toOrderBot.{u4} (Set.{u4} α) (Preorder.toLE.{u4} (Set.{u4} α) (PartialOrder.toPreorder.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))))) (CompleteLattice.toBoundedOrder.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (X i) (X j))) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u2} (H i) h (OfNat.ofNat.{u2} (H i) 1 (One.toOfNat1.{u2} (H i) (InvOneClass.toOne.{u2} (H i) (DivInvOneMonoid.toInvOneClass.{u2} (H i) (DivisionMonoid.toDivInvOneMonoid.{u2} (H i) (Group.toDivisionMonoid.{u2} (H i) (_inst_4 i)))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.instHasSubsetSet.{u4} α) (HSMul.hSMul.{u1, u4, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Set.{u4} α) (Set.{u4} α) (instHSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Set.{u4} α) (Set.smulSet.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) α (MulAction.toSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) α (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) _inst_3)) _inst_5))) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) (fun (_x : H i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) _x) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (MulOneClass.toMul.{u2} (H i) (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (f i) h) (X j)) (X i)))) -> (forall {i : ι} {j : ι} (w : FreeProduct.NeWord.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j), Ne.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (FunLike.coe.{max (max (succ u3) (succ u1)) (succ u2), max (succ u3) (succ u2), succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (fun (_x : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) _x) (MulHomClass.toFunLike.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (MulOneClass.toMul.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{max u3 u2, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (Equiv.{max (max (succ u3) (succ u2)) (succ u1), max (succ u1) (succ (max u2 u3))} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (fun (_x : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) _x) (Equiv.instFunLikeEquiv.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (FreeProduct.lift.{u3, u2, u1} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) f) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (InvOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) (Group.toDivisionMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.NeWord.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) i j w)) _inst_3))))))))
+Case conversion may be inaccurate. Consider using '#align free_product.lift_word_prod_nontrivial_of_not_empty FreeProduct.lift_word_prod_nontrivial_of_not_emptyₓ'. -/
+theorem lift_word_prod_nontrivial_of_not_empty {i j} (w : NeWord H i j) : lift f w.Prod ≠ 1 := by
   classical
     cases hcard
     · obtain ⟨i, h1, h2⟩ := Cardinal.three_le hcard i j
@@ -808,6 +1118,12 @@ theorem lift_word_prod_nontrivial_of_not_empty {i j} (w : Neword H i j) : lift f
         simp [w', heq1]
 #align free_product.lift_word_prod_nontrivial_of_not_empty FreeProduct.lift_word_prod_nontrivial_of_not_empty
 
+/- warning: free_product.empty_of_word_prod_eq_one -> FreeProduct.empty_of_word_prod_eq_one is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} [hnontriv : Nontrivial.{u1} ι] {G : Type.{u2}} [_inst_3 : Group.{u2} G] {H : ι -> Type.{u3}} [_inst_4 : forall (i : ι), Group.{u3} (H i)] (f : forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))), (Or (LE.le.{succ u1} Cardinal.{u1} Cardinal.hasLe.{u1} (OfNat.ofNat.{succ u1} Cardinal.{u1} 3 (OfNat.mk.{succ u1} Cardinal.{u1} 3 (bit1.{succ u1} Cardinal.{u1} Cardinal.hasOne.{u1} Cardinal.hasAdd.{u1} (One.one.{succ u1} Cardinal.{u1} Cardinal.hasOne.{u1})))) (Cardinal.mk.{u1} ι)) (Exists.{succ u1} ι (fun (i : ι) => LE.le.{succ u3} Cardinal.{u3} Cardinal.hasLe.{u3} (OfNat.ofNat.{succ u3} Cardinal.{u3} 3 (OfNat.mk.{succ u3} Cardinal.{u3} 3 (bit1.{succ u3} Cardinal.{u3} Cardinal.hasOne.{u3} Cardinal.hasAdd.{u3} (One.one.{succ u3} Cardinal.{u3} Cardinal.hasOne.{u3})))) (Cardinal.mk.{u3} (H i))))) -> (forall {α : Type.{u4}} [_inst_5 : MulAction.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.completeBooleanAlgebra.{u4} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u4} (Set.{u4} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u4} (Set.{u4} α) (Set.booleanAlgebra.{u4} α))) (X i) (X j))) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u3} (H i) h (OfNat.ofNat.{u3} (H i) 1 (OfNat.mk.{u3} (H i) 1 (One.one.{u3} (H i) (MulOneClass.toHasOne.{u3} (H i) (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.hasSubset.{u4} α) (SMul.smul.{u2, u4} G (Set.{u4} α) (Set.smulSet.{u2, u4} G α (MulAction.toHasSmul.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)) _inst_5)) (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (H i) -> G) (MonoidHom.hasCoeToFun.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (f i) h) (X j)) (X i)))) -> (forall {w : FreeProduct.Word.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))}, (Eq.{succ u2} G (coeFn.{max (succ u2) (succ (max u1 u3)), max (succ (max u1 u3)) (succ u2)} (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) -> G) (MonoidHom.hasCoeToFun.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (coeFn.{max 1 (max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))) (max (succ u2) (succ (max u1 u3))) (succ u1) (succ u2) (succ u3), max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))} (Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (fun (_x : Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) => (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) -> (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (FreeProduct.lift.{u1, u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) f) (FreeProduct.Word.prod.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) w)) (OfNat.ofNat.{u2} G 1 (OfNat.mk.{u2} G 1 (One.one.{u2} G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))))))) -> (Eq.{max (succ u1) (succ u3)} (FreeProduct.Word.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) w (FreeProduct.Word.empty.{u1, u3} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))))))
+but is expected to have type
+  forall {ι : Type.{u3}} [hnontriv : Nontrivial.{u3} ι] {G : Type.{u1}} [_inst_3 : Group.{u1} G] {H : ι -> Type.{u2}} [_inst_4 : forall (i : ι), Group.{u2} (H i)] (f : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))), (Or (LE.le.{succ u3} Cardinal.{u3} Cardinal.instLECardinal.{u3} (OfNat.ofNat.{succ u3} Cardinal.{u3} 3 (instOfNat.{succ u3} Cardinal.{u3} 3 Cardinal.instNatCastCardinal.{u3} (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))) (Cardinal.mk.{u3} ι)) (Exists.{succ u3} ι (fun (i : ι) => LE.le.{succ u2} Cardinal.{u2} Cardinal.instLECardinal.{u2} (OfNat.ofNat.{succ u2} Cardinal.{u2} 3 (instOfNat.{succ u2} Cardinal.{u2} 3 Cardinal.instNatCastCardinal.{u2} (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))) (Cardinal.mk.{u2} (H i))))) -> (forall {α : Type.{u4}} [_inst_5 : MulAction.{u1, u4} G α (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (BoundedOrder.toOrderBot.{u4} (Set.{u4} α) (Preorder.toLE.{u4} (Set.{u4} α) (PartialOrder.toPreorder.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))))) (CompleteLattice.toBoundedOrder.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (X i) (X j))) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u2} (H i) h (OfNat.ofNat.{u2} (H i) 1 (One.toOfNat1.{u2} (H i) (InvOneClass.toOne.{u2} (H i) (DivInvOneMonoid.toInvOneClass.{u2} (H i) (DivisionMonoid.toDivInvOneMonoid.{u2} (H i) (Group.toDivisionMonoid.{u2} (H i) (_inst_4 i)))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.instHasSubsetSet.{u4} α) (HSMul.hSMul.{u1, u4, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Set.{u4} α) (Set.{u4} α) (instHSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Set.{u4} α) (Set.smulSet.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) α (MulAction.toSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) α (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) _inst_3)) _inst_5))) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) (fun (_x : H i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) _x) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (MulOneClass.toMul.{u2} (H i) (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (f i) h) (X j)) (X i)))) -> (forall {w : FreeProduct.Word.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))}, (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.Word.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) w)) (FunLike.coe.{max (max (succ u3) (succ u1)) (succ u2), max (succ u3) (succ u2), succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (fun (_x : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) _x) (MulHomClass.toFunLike.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (MulOneClass.toMul.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{max u3 u2, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (Equiv.{max (max (succ u3) (succ u2)) (succ u1), max (succ u1) (succ (max u2 u3))} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (fun (_x : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) _x) (Equiv.instFunLikeEquiv.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (FreeProduct.lift.{u3, u2, u1} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) f) (FreeProduct.Word.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) w)) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.Word.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) w)) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.Word.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) w)) (InvOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.Word.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) w)) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.Word.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) w)) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.Word.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) w)) (Group.toDivisionMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) (FreeProduct.Word.prod.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) w)) _inst_3))))))) -> (Eq.{max (succ u3) (succ u2)} (FreeProduct.Word.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) w (FreeProduct.Word.empty.{u3, u2} ι H (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))))))
+Case conversion may be inaccurate. Consider using '#align free_product.empty_of_word_prod_eq_one FreeProduct.empty_of_word_prod_eq_oneₓ'. -/
 theorem empty_of_word_prod_eq_one {w : Word H} (h : lift f w.Prod = 1) : w = Word.empty :=
   by
   by_contra hnotempty
@@ -815,6 +1131,12 @@ theorem empty_of_word_prod_eq_one {w : Word H} (h : lift f w.Prod = 1) : w = Wor
   exact lift_word_prod_nontrivial_of_not_empty f hcard X hXnonempty hXdisj hpp w h
 #align free_product.empty_of_word_prod_eq_one FreeProduct.empty_of_word_prod_eq_one
 
+/- warning: free_product.lift_injective_of_ping_pong -> FreeProduct.lift_injective_of_ping_pong is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}} [hnontriv : Nontrivial.{u1} ι] {G : Type.{u2}} [_inst_3 : Group.{u2} G] {H : ι -> Type.{u3}} [_inst_4 : forall (i : ι), Group.{u3} (H i)] (f : forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))), (Or (LE.le.{succ u1} Cardinal.{u1} Cardinal.hasLe.{u1} (OfNat.ofNat.{succ u1} Cardinal.{u1} 3 (OfNat.mk.{succ u1} Cardinal.{u1} 3 (bit1.{succ u1} Cardinal.{u1} Cardinal.hasOne.{u1} Cardinal.hasAdd.{u1} (One.one.{succ u1} Cardinal.{u1} Cardinal.hasOne.{u1})))) (Cardinal.mk.{u1} ι)) (Exists.{succ u1} ι (fun (i : ι) => LE.le.{succ u3} Cardinal.{u3} Cardinal.hasLe.{u3} (OfNat.ofNat.{succ u3} Cardinal.{u3} 3 (OfNat.mk.{succ u3} Cardinal.{u3} 3 (bit1.{succ u3} Cardinal.{u3} Cardinal.hasOne.{u3} Cardinal.hasAdd.{u3} (One.one.{succ u3} Cardinal.{u3} Cardinal.hasOne.{u3})))) (Cardinal.mk.{u3} (H i))))) -> (forall {α : Type.{u4}} [_inst_5 : MulAction.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.completeBooleanAlgebra.{u4} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u4} (Set.{u4} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u4} (Set.{u4} α) (Set.booleanAlgebra.{u4} α))) (X i) (X j))) -> (Pairwise.{u1} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u3} (H i) h (OfNat.ofNat.{u3} (H i) 1 (OfNat.mk.{u3} (H i) 1 (One.one.{u3} (H i) (MulOneClass.toHasOne.{u3} (H i) (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.hasSubset.{u4} α) (SMul.smul.{u2, u4} G (Set.{u4} α) (Set.smulSet.{u2, u4} G α (MulAction.toHasSmul.{u2, u4} G α (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)) _inst_5)) (coeFn.{max (succ u2) (succ u3), max (succ u3) (succ u2)} (MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (H i) -> G) (MonoidHom.hasCoeToFun.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (f i) h) (X j)) (X i)))) -> (Function.Injective.{succ (max u1 u3), succ u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (coeFn.{max (succ u2) (succ (max u1 u3)), max (succ (max u1 u3)) (succ u2)} (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (fun (_x : MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) => (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) -> G) (MonoidHom.hasCoeToFun.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (coeFn.{max 1 (max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))) (max (succ u2) (succ (max u1 u3))) (succ u1) (succ u2) (succ u3), max (max (succ u1) (succ u2) (succ u3)) (succ u2) (succ (max u1 u3))} (Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (fun (_x : Equiv.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) => (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) -> (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2) (succ u3), max (succ u2) (succ (max u1 u3))} (forall (i : ι), MonoidHom.{u3, u2} (H i) G (Monoid.toMulOneClass.{u3} (H i) (DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MonoidHom.{max u1 u3, u2} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u1 u3} (FreeProduct.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i)))) (FreeProduct.monoid.{u1, u3} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))))) (FreeProduct.lift.{u1, u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u3} (H i) (Group.toDivInvMonoid.{u3} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) f))))
+but is expected to have type
+  forall {ι : Type.{u3}} [hnontriv : Nontrivial.{u3} ι] {G : Type.{u1}} [_inst_3 : Group.{u1} G] {H : ι -> Type.{u2}} [_inst_4 : forall (i : ι), Group.{u2} (H i)] (f : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))), (Or (LE.le.{succ u3} Cardinal.{u3} Cardinal.instLECardinal.{u3} (OfNat.ofNat.{succ u3} Cardinal.{u3} 3 (instOfNat.{succ u3} Cardinal.{u3} 3 Cardinal.instNatCastCardinal.{u3} (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))) (Cardinal.mk.{u3} ι)) (Exists.{succ u3} ι (fun (i : ι) => LE.le.{succ u2} Cardinal.{u2} Cardinal.instLECardinal.{u2} (OfNat.ofNat.{succ u2} Cardinal.{u2} 3 (instOfNat.{succ u2} Cardinal.{u2} 3 Cardinal.instNatCastCardinal.{u2} (instAtLeastTwoHAddNatInstHAddInstAddNatOfNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))) (Cardinal.mk.{u2} (H i))))) -> (forall {α : Type.{u4}} [_inst_5 : MulAction.{u1, u4} G α (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))] (X : ι -> (Set.{u4} α)), (forall (i : ι), Set.Nonempty.{u4} α (X i)) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => Disjoint.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (BoundedOrder.toOrderBot.{u4} (Set.{u4} α) (Preorder.toLE.{u4} (Set.{u4} α) (PartialOrder.toPreorder.{u4} (Set.{u4} α) (CompleteSemilatticeInf.toPartialOrder.{u4} (Set.{u4} α) (CompleteLattice.toCompleteSemilatticeInf.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))))) (CompleteLattice.toBoundedOrder.{u4} (Set.{u4} α) (Order.Coframe.toCompleteLattice.{u4} (Set.{u4} α) (CompleteDistribLattice.toCoframe.{u4} (Set.{u4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u4} (Set.{u4} α) (Set.instCompleteBooleanAlgebraSet.{u4} α)))))) (X i) (X j))) -> (Pairwise.{u3} ι (fun (i : ι) (j : ι) => forall (h : H i), (Ne.{succ u2} (H i) h (OfNat.ofNat.{u2} (H i) 1 (One.toOfNat1.{u2} (H i) (InvOneClass.toOne.{u2} (H i) (DivInvOneMonoid.toInvOneClass.{u2} (H i) (DivisionMonoid.toDivInvOneMonoid.{u2} (H i) (Group.toDivisionMonoid.{u2} (H i) (_inst_4 i)))))))) -> (HasSubset.Subset.{u4} (Set.{u4} α) (Set.instHasSubsetSet.{u4} α) (HSMul.hSMul.{u1, u4, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Set.{u4} α) (Set.{u4} α) (instHSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Set.{u4} α) (Set.smulSet.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) α (MulAction.toSMul.{u1, u4} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) α (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) h) _inst_3)) _inst_5))) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) (fun (_x : H i) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : H i) => G) _x) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (MulOneClass.toMul.{u2} (H i) (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (f i) h) (X j)) (X i)))) -> (Function.Injective.{max (succ u3) (succ u2), succ u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (FunLike.coe.{max (max (succ u3) (succ u1)) (succ u2), max (succ u3) (succ u2), succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (fun (_x : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) => G) _x) (MulHomClass.toFunLike.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (MulOneClass.toMul.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))))) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHomClass.toMulHomClass.{max (max u3 u1) u2, max u3 u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) f) (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (MonoidHom.monoidHomClass.{max u3 u2, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))))) (FunLike.coe.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (Equiv.{max (max (succ u3) (succ u2)) (succ u1), max (succ u1) (succ (max u2 u3))} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (fun (_x : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) => MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) _x) (Equiv.instFunLikeEquiv.{max (max (succ u1) (succ u2)) (succ u3), max (max (succ u1) (succ u2)) (succ u3)} (forall (i : ι), MonoidHom.{u2, u1} (H i) G (Monoid.toMulOneClass.{u2} (H i) (DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MonoidHom.{max u2 u3, u1} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) G (Monoid.toMulOneClass.{max u3 u2} (FreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i)))) (instMonoidFreeProduct.{u3, u2} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))))) (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) (FreeProduct.lift.{u3, u2, u1} ι (fun (i : ι) => H i) (fun (i : ι) => DivInvMonoid.toMonoid.{u2} (H i) (Group.toDivInvMonoid.{u2} (H i) (_inst_4 i))) G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) f))))
+Case conversion may be inaccurate. Consider using '#align free_product.lift_injective_of_ping_pong FreeProduct.lift_injective_of_ping_pongₓ'. -/
 /-- The Ping-Pong-Lemma.
 
 Given a group action of `G` on `X` so that the `H i` acts in a specific way on disjoint subsets
@@ -861,6 +1183,12 @@ instance {ι : Type _} (G : ι → Type _) [∀ i, Group (G i)] [hG : ∀ i, IsF
         ext
         simp)
 
+/- warning: free_group_equiv_free_product -> freeGroupEquivFreeProduct is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u1}}, MulEquiv.{u1, u1} (FreeGroup.{u1} ι) (FreeProduct.{u1, 0} ι (fun (_x : ι) => FreeGroup.{0} Unit) (fun (i : ι) => DivInvMonoid.toMonoid.{0} (FreeGroup.{0} Unit) (Group.toDivInvMonoid.{0} (FreeGroup.{0} Unit) (FreeGroup.group.{0} Unit)))) (FreeGroup.hasMul.{u1} ι) (MulOneClass.toHasMul.{u1} (FreeProduct.{u1, 0} ι (fun (_x : ι) => FreeGroup.{0} Unit) (fun (i : ι) => DivInvMonoid.toMonoid.{0} (FreeGroup.{0} Unit) (Group.toDivInvMonoid.{0} (FreeGroup.{0} Unit) (FreeGroup.group.{0} Unit)))) (Monoid.toMulOneClass.{u1} (FreeProduct.{u1, 0} ι (fun (_x : ι) => FreeGroup.{0} Unit) (fun (i : ι) => DivInvMonoid.toMonoid.{0} (FreeGroup.{0} Unit) (Group.toDivInvMonoid.{0} (FreeGroup.{0} Unit) (FreeGroup.group.{0} Unit)))) (FreeProduct.monoid.{u1, 0} ι (fun (_x : ι) => FreeGroup.{0} Unit) (fun (i : ι) => DivInvMonoid.toMonoid.{0} (FreeGroup.{0} Unit) (Group.toDivInvMonoid.{0} (FreeGroup.{0} Unit) (FreeGroup.group.{0} Unit))))))
+but is expected to have type
+  forall {ι : Type.{u1}}, MulEquiv.{u1, u1} (FreeGroup.{u1} ι) (FreeProduct.{u1, 0} ι (fun (_x : ι) => FreeGroup.{0} Unit) (fun (i : ι) => DivInvMonoid.toMonoid.{0} ((fun (x._@.Mathlib.GroupTheory.FreeProduct._hyg.10100 : ι) => FreeGroup.{0} Unit) i) (Group.toDivInvMonoid.{0} ((fun (x._@.Mathlib.GroupTheory.FreeProduct._hyg.10100 : ι) => FreeGroup.{0} Unit) i) (FreeGroup.instGroupFreeGroup.{0} Unit)))) (FreeGroup.instMulFreeGroup.{u1} ι) (MulOneClass.toMul.{u1} (FreeProduct.{u1, 0} ι (fun (_x : ι) => FreeGroup.{0} Unit) (fun (i : ι) => DivInvMonoid.toMonoid.{0} ((fun (x._@.Mathlib.GroupTheory.FreeProduct._hyg.10100 : ι) => FreeGroup.{0} Unit) i) (Group.toDivInvMonoid.{0} ((fun (x._@.Mathlib.GroupTheory.FreeProduct._hyg.10100 : ι) => FreeGroup.{0} Unit) i) (FreeGroup.instGroupFreeGroup.{0} Unit)))) (Monoid.toMulOneClass.{u1} (FreeProduct.{u1, 0} ι (fun (_x : ι) => FreeGroup.{0} Unit) (fun (i : ι) => DivInvMonoid.toMonoid.{0} ((fun (x._@.Mathlib.GroupTheory.FreeProduct._hyg.10100 : ι) => FreeGroup.{0} Unit) i) (Group.toDivInvMonoid.{0} ((fun (x._@.Mathlib.GroupTheory.FreeProduct._hyg.10100 : ι) => FreeGroup.{0} Unit) i) (FreeGroup.instGroupFreeGroup.{0} Unit)))) (instMonoidFreeProduct.{u1, 0} ι (fun (_x : ι) => FreeGroup.{0} Unit) (fun (i : ι) => DivInvMonoid.toMonoid.{0} ((fun (x._@.Mathlib.GroupTheory.FreeProduct._hyg.10100 : ι) => FreeGroup.{0} Unit) i) (Group.toDivInvMonoid.{0} ((fun (x._@.Mathlib.GroupTheory.FreeProduct._hyg.10100 : ι) => FreeGroup.{0} Unit) i) (FreeGroup.instGroupFreeGroup.{0} Unit))))))
+Case conversion may be inaccurate. Consider using '#align free_group_equiv_free_product freeGroupEquivFreeProductₓ'. -/
 -- NB: One might expect this theorem to be phrased with ℤ, but ℤ is an additive group,
 -- and using `multiplicative ℤ` runs into diamond issues.
 /-- A free group is a free product of copies of the free_group over one generator. -/
@@ -905,6 +1233,12 @@ variable (hY : ∀ i, a⁻¹ i • X iᶜ ⊆ Y i)
 
 include hXnonempty hXdisj hYdisj hXYdisj hX hY
 
+/- warning: free_group.injective_lift_of_ping_pong -> FreeGroup.injective_lift_of_ping_pong is a dubious translation:
+lean 3 declaration is
+  forall {ι : Type.{u_1}} [_inst_3 : Nontrivial.{u_1} ι] {G : Type.{u_1}} [_inst_4 : Group.{u_1} G] (a : ι -> G) {α : Type.{u_4}} [_inst_5 : MulAction.{u_1, u_4} G α (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4))] (X : ι -> (Set.{u_4} α)) (Y : ι -> (Set.{u_4} α)), (forall (i : ι), Set.Nonempty.{u_4} α (X i)) -> (Pairwise.{u_1} ι (fun (i : ι) (j : ι) => Disjoint.{u_4} (Set.{u_4} α) (CompleteSemilatticeInf.toPartialOrder.{u_4} (Set.{u_4} α) (CompleteLattice.toCompleteSemilatticeInf.{u_4} (Set.{u_4} α) (Order.Coframe.toCompleteLattice.{u_4} (Set.{u_4} α) (CompleteDistribLattice.toCoframe.{u_4} (Set.{u_4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_4} (Set.{u_4} α) (Set.completeBooleanAlgebra.{u_4} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u_4} (Set.{u_4} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u_4} (Set.{u_4} α) (Set.booleanAlgebra.{u_4} α))) (X i) (X j))) -> (Pairwise.{u_1} ι (fun (i : ι) (j : ι) => Disjoint.{u_4} (Set.{u_4} α) (CompleteSemilatticeInf.toPartialOrder.{u_4} (Set.{u_4} α) (CompleteLattice.toCompleteSemilatticeInf.{u_4} (Set.{u_4} α) (Order.Coframe.toCompleteLattice.{u_4} (Set.{u_4} α) (CompleteDistribLattice.toCoframe.{u_4} (Set.{u_4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_4} (Set.{u_4} α) (Set.completeBooleanAlgebra.{u_4} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u_4} (Set.{u_4} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u_4} (Set.{u_4} α) (Set.booleanAlgebra.{u_4} α))) (Y i) (Y j))) -> (forall (i : ι) (j : ι), Disjoint.{u_4} (Set.{u_4} α) (CompleteSemilatticeInf.toPartialOrder.{u_4} (Set.{u_4} α) (CompleteLattice.toCompleteSemilatticeInf.{u_4} (Set.{u_4} α) (Order.Coframe.toCompleteLattice.{u_4} (Set.{u_4} α) (CompleteDistribLattice.toCoframe.{u_4} (Set.{u_4} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_4} (Set.{u_4} α) (Set.completeBooleanAlgebra.{u_4} α)))))) (GeneralizedBooleanAlgebra.toOrderBot.{u_4} (Set.{u_4} α) (BooleanAlgebra.toGeneralizedBooleanAlgebra.{u_4} (Set.{u_4} α) (Set.booleanAlgebra.{u_4} α))) (X i) (Y j)) -> (forall (i : ι), HasSubset.Subset.{u_4} (Set.{u_4} α) (Set.hasSubset.{u_4} α) (SMul.smul.{u_1, u_4} G (Set.{u_4} α) (Set.smulSet.{u_1, u_4} G α (MulAction.toHasSmul.{u_1, u_4} G α (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)) _inst_5)) (a i) (HasCompl.compl.{u_4} (Set.{u_4} α) (BooleanAlgebra.toHasCompl.{u_4} (Set.{u_4} α) (Set.booleanAlgebra.{u_4} α)) (Y i))) (X i)) -> (forall (i : ι), HasSubset.Subset.{u_4} (Set.{u_4} α) (Set.hasSubset.{u_4} α) (SMul.smul.{u_1, u_4} G (Set.{u_4} α) (Set.smulSet.{u_1, u_4} G α (MulAction.toHasSmul.{u_1, u_4} G α (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)) _inst_5)) (Inv.inv.{u_1} (ι -> G) (Pi.instInv.{u_1, u_1} ι (fun (ᾰ : ι) => G) (fun (i : ι) => DivInvMonoid.toHasInv.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4))) a i) (HasCompl.compl.{u_4} (Set.{u_4} α) (BooleanAlgebra.toHasCompl.{u_4} (Set.{u_4} α) (Set.booleanAlgebra.{u_4} α)) (X i))) (Y i)) -> (Function.Injective.{succ u_1, succ u_1} (FreeGroup.{u_1} ι) G (coeFn.{succ u_1, succ u_1} (MonoidHom.{u_1, u_1} (FreeGroup.{u_1} ι) G (Monoid.toMulOneClass.{u_1} (FreeGroup.{u_1} ι) (DivInvMonoid.toMonoid.{u_1} (FreeGroup.{u_1} ι) (Group.toDivInvMonoid.{u_1} (FreeGroup.{u_1} ι) (FreeGroup.group.{u_1} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)))) (fun (_x : MonoidHom.{u_1, u_1} (FreeGroup.{u_1} ι) G (Monoid.toMulOneClass.{u_1} (FreeGroup.{u_1} ι) (DivInvMonoid.toMonoid.{u_1} (FreeGroup.{u_1} ι) (Group.toDivInvMonoid.{u_1} (FreeGroup.{u_1} ι) (FreeGroup.group.{u_1} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)))) => (FreeGroup.{u_1} ι) -> G) (MonoidHom.hasCoeToFun.{u_1, u_1} (FreeGroup.{u_1} ι) G (Monoid.toMulOneClass.{u_1} (FreeGroup.{u_1} ι) (DivInvMonoid.toMonoid.{u_1} (FreeGroup.{u_1} ι) (Group.toDivInvMonoid.{u_1} (FreeGroup.{u_1} ι) (FreeGroup.group.{u_1} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)))) (coeFn.{max 1 (succ u_1), succ u_1} (Equiv.{succ u_1, succ u_1} (ι -> G) (MonoidHom.{u_1, u_1} (FreeGroup.{u_1} ι) G (Monoid.toMulOneClass.{u_1} (FreeGroup.{u_1} ι) (DivInvMonoid.toMonoid.{u_1} (FreeGroup.{u_1} ι) (Group.toDivInvMonoid.{u_1} (FreeGroup.{u_1} ι) (FreeGroup.group.{u_1} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4))))) (fun (_x : Equiv.{succ u_1, succ u_1} (ι -> G) (MonoidHom.{u_1, u_1} (FreeGroup.{u_1} ι) G (Monoid.toMulOneClass.{u_1} (FreeGroup.{u_1} ι) (DivInvMonoid.toMonoid.{u_1} (FreeGroup.{u_1} ι) (Group.toDivInvMonoid.{u_1} (FreeGroup.{u_1} ι) (FreeGroup.group.{u_1} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4))))) => (ι -> G) -> (MonoidHom.{u_1, u_1} (FreeGroup.{u_1} ι) G (Monoid.toMulOneClass.{u_1} (FreeGroup.{u_1} ι) (DivInvMonoid.toMonoid.{u_1} (FreeGroup.{u_1} ι) (Group.toDivInvMonoid.{u_1} (FreeGroup.{u_1} ι) (FreeGroup.group.{u_1} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4))))) (Equiv.hasCoeToFun.{succ u_1, succ u_1} (ι -> G) (MonoidHom.{u_1, u_1} (FreeGroup.{u_1} ι) G (Monoid.toMulOneClass.{u_1} (FreeGroup.{u_1} ι) (DivInvMonoid.toMonoid.{u_1} (FreeGroup.{u_1} ι) (Group.toDivInvMonoid.{u_1} (FreeGroup.{u_1} ι) (FreeGroup.group.{u_1} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4))))) (FreeGroup.lift.{u_1, u_1} ι G _inst_4) a)))
+but is expected to have type
+  forall {ι : Type.{u_2}} [_inst_3 : Nontrivial.{u_2} ι] {G : Type.{u_1}} [_inst_4 : Group.{u_1} G] (a : ι -> G) {α : Type.{u_3}} [_inst_5 : MulAction.{u_1, u_3} G α (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4))] (X : ι -> (Set.{u_3} α)) (Y : ι -> (Set.{u_3} α)), (forall (i : ι), Set.Nonempty.{u_3} α (X i)) -> (Pairwise.{u_2} ι (fun (i : ι) (j : ι) => Disjoint.{u_3} (Set.{u_3} α) (CompleteSemilatticeInf.toPartialOrder.{u_3} (Set.{u_3} α) (CompleteLattice.toCompleteSemilatticeInf.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))) (BoundedOrder.toOrderBot.{u_3} (Set.{u_3} α) (Preorder.toLE.{u_3} (Set.{u_3} α) (PartialOrder.toPreorder.{u_3} (Set.{u_3} α) (CompleteSemilatticeInf.toPartialOrder.{u_3} (Set.{u_3} α) (CompleteLattice.toCompleteSemilatticeInf.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))))) (CompleteLattice.toBoundedOrder.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))) (X i) (X j))) -> (Pairwise.{u_2} ι (fun (i : ι) (j : ι) => Disjoint.{u_3} (Set.{u_3} α) (CompleteSemilatticeInf.toPartialOrder.{u_3} (Set.{u_3} α) (CompleteLattice.toCompleteSemilatticeInf.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))) (BoundedOrder.toOrderBot.{u_3} (Set.{u_3} α) (Preorder.toLE.{u_3} (Set.{u_3} α) (PartialOrder.toPreorder.{u_3} (Set.{u_3} α) (CompleteSemilatticeInf.toPartialOrder.{u_3} (Set.{u_3} α) (CompleteLattice.toCompleteSemilatticeInf.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))))) (CompleteLattice.toBoundedOrder.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))) (Y i) (Y j))) -> (forall (i : ι) (j : ι), Disjoint.{u_3} (Set.{u_3} α) (CompleteSemilatticeInf.toPartialOrder.{u_3} (Set.{u_3} α) (CompleteLattice.toCompleteSemilatticeInf.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))) (BoundedOrder.toOrderBot.{u_3} (Set.{u_3} α) (Preorder.toLE.{u_3} (Set.{u_3} α) (PartialOrder.toPreorder.{u_3} (Set.{u_3} α) (CompleteSemilatticeInf.toPartialOrder.{u_3} (Set.{u_3} α) (CompleteLattice.toCompleteSemilatticeInf.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))))) (CompleteLattice.toBoundedOrder.{u_3} (Set.{u_3} α) (Order.Coframe.toCompleteLattice.{u_3} (Set.{u_3} α) (CompleteDistribLattice.toCoframe.{u_3} (Set.{u_3} α) (CompleteBooleanAlgebra.toCompleteDistribLattice.{u_3} (Set.{u_3} α) (Set.instCompleteBooleanAlgebraSet.{u_3} α)))))) (X i) (Y j)) -> (forall (i : ι), HasSubset.Subset.{u_3} (Set.{u_3} α) (Set.instHasSubsetSet.{u_3} α) (HSMul.hSMul.{u_1, u_3, u_3} G (Set.{u_3} α) (Set.{u_3} α) (instHSMul.{u_1, u_3} G (Set.{u_3} α) (Set.smulSet.{u_1, u_3} G α (MulAction.toSMul.{u_1, u_3} G α (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)) _inst_5))) (a i) (HasCompl.compl.{u_3} (Set.{u_3} α) (BooleanAlgebra.toHasCompl.{u_3} (Set.{u_3} α) (Set.instBooleanAlgebraSet.{u_3} α)) (Y i))) (X i)) -> (forall (i : ι), HasSubset.Subset.{u_3} (Set.{u_3} α) (Set.instHasSubsetSet.{u_3} α) (HSMul.hSMul.{u_1, u_3, u_3} G (Set.{u_3} α) (Set.{u_3} α) (instHSMul.{u_1, u_3} G (Set.{u_3} α) (Set.smulSet.{u_1, u_3} G α (MulAction.toSMul.{u_1, u_3} G α (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)) _inst_5))) (Inv.inv.{max u_1 u_2} (ι -> G) (Pi.instInv.{u_2, u_1} ι (fun (ᾰ : ι) => G) (fun (i : ι) => InvOneClass.toInv.{u_1} G (DivInvOneMonoid.toInvOneClass.{u_1} G (DivisionMonoid.toDivInvOneMonoid.{u_1} G (Group.toDivisionMonoid.{u_1} G _inst_4))))) a i) (HasCompl.compl.{u_3} (Set.{u_3} α) (BooleanAlgebra.toHasCompl.{u_3} (Set.{u_3} α) (Set.instBooleanAlgebraSet.{u_3} α)) (X i))) (Y i)) -> (Function.Injective.{succ u_2, succ u_1} (FreeGroup.{u_2} ι) G (FunLike.coe.{max (succ u_1) (succ u_2), succ u_2, succ u_1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : ι -> G) => MonoidHom.{u_2, u_1} (FreeGroup.{u_2} ι) G (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)))) a) (FreeGroup.{u_2} ι) (fun (_x : FreeGroup.{u_2} ι) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeGroup.{u_2} ι) => G) _x) (MulHomClass.toFunLike.{max u_1 u_2, u_2, u_1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : ι -> G) => MonoidHom.{u_2, u_1} (FreeGroup.{u_2} ι) G (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)))) a) (FreeGroup.{u_2} ι) G (MulOneClass.toMul.{u_2} (FreeGroup.{u_2} ι) (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι))))) (MulOneClass.toMul.{u_1} G (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)))) (MonoidHomClass.toMulHomClass.{max u_1 u_2, u_2, u_1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : ι -> G) => MonoidHom.{u_2, u_1} (FreeGroup.{u_2} ι) G (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)))) a) (FreeGroup.{u_2} ι) G (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4))) (MonoidHom.monoidHomClass.{u_2, u_1} (FreeGroup.{u_2} ι) G (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)))))) (FunLike.coe.{max (succ u_1) (succ u_2), max (succ u_1) (succ u_2), max (succ u_1) (succ u_2)} (Equiv.{max (succ u_2) (succ u_1), max (succ u_1) (succ u_2)} (ι -> G) (MonoidHom.{u_2, u_1} (FreeGroup.{u_2} ι) G (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4))))) (ι -> G) (fun (_x : ι -> G) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : ι -> G) => MonoidHom.{u_2, u_1} (FreeGroup.{u_2} ι) G (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4)))) _x) (Equiv.instFunLikeEquiv.{max (succ u_1) (succ u_2), max (succ u_1) (succ u_2)} (ι -> G) (MonoidHom.{u_2, u_1} (FreeGroup.{u_2} ι) G (Monoid.toMulOneClass.{u_2} (FreeGroup.{u_2} ι) (DivInvMonoid.toMonoid.{u_2} (FreeGroup.{u_2} ι) (Group.toDivInvMonoid.{u_2} (FreeGroup.{u_2} ι) (FreeGroup.instGroupFreeGroup.{u_2} ι)))) (Monoid.toMulOneClass.{u_1} G (DivInvMonoid.toMonoid.{u_1} G (Group.toDivInvMonoid.{u_1} G _inst_4))))) (FreeGroup.lift.{u_2, u_1} ι G _inst_4) a)))
+Case conversion may be inaccurate. Consider using '#align free_group.injective_lift_of_ping_pong FreeGroup.injective_lift_of_ping_pongₓ'. -/
 /-- The Ping-Pong-Lemma.
 
 Given a group action of `G` on `X` so that the generators of the free groups act in specific
Diff
@@ -733,7 +733,7 @@ theorem lift_word_ping_pong {i j k} (w : Neword H i j) (hk : j ≠ k) : lift f w
     calc
       lift f (neword.append w₁ hne w₂).Prod • X m = lift f w₁.prod • lift f w₂.prod • X m := by
         simp [MulAction.mul_smul]
-      _ ⊆ lift f w₁.prod • X k := set_smul_subset_set_smul_iff.mpr (hIw₂ hm)
+      _ ⊆ lift f w₁.prod • X k := (set_smul_subset_set_smul_iff.mpr (hIw₂ hm))
       _ ⊆ X i := hIw₁ hne
       
 #align free_product.lift_word_ping_pong FreeProduct.lift_word_ping_pong
@@ -980,9 +980,9 @@ theorem FreeGroup.injective_lift_of_ping_pong : Function.Injective (FreeGroup.li
           · intro n hle hi
             calc
               a i ^ (n + 1) • Y iᶜ = (a i ^ n * a i) • Y iᶜ := by rw [zpow_add, zpow_one]
-              _ = a i ^ n • a i • Y iᶜ := MulAction.mul_smul _ _ _
-              _ ⊆ a i ^ n • X i := smul_set_mono <| hX i
-              _ ⊆ a i ^ n • Y iᶜ := smul_set_mono (hXYdisj i i).subset_compl_right
+              _ = a i ^ n • a i • Y iᶜ := (MulAction.mul_smul _ _ _)
+              _ ⊆ a i ^ n • X i := (smul_set_mono <| hX i)
+              _ ⊆ a i ^ n • Y iᶜ := (smul_set_mono (hXYdisj i i).subset_compl_right)
               _ ⊆ X i := hi
               
         _ ⊆ X' i := Set.subset_union_left _ _
@@ -1000,9 +1000,9 @@ theorem FreeGroup.injective_lift_of_ping_pong : Function.Injective (FreeGroup.li
           · intro n hle hi
             calc
               a i ^ (n - 1) • X iᶜ = (a i ^ n * (a i)⁻¹) • X iᶜ := by rw [zpow_sub, zpow_one]
-              _ = a i ^ n • (a i)⁻¹ • X iᶜ := MulAction.mul_smul _ _ _
-              _ ⊆ a i ^ n • Y i := smul_set_mono <| hY i
-              _ ⊆ a i ^ n • X iᶜ := smul_set_mono (hXYdisj i i).symm.subset_compl_right
+              _ = a i ^ n • (a i)⁻¹ • X iᶜ := (MulAction.mul_smul _ _ _)
+              _ ⊆ a i ^ n • Y i := (smul_set_mono <| hY i)
+              _ ⊆ a i ^ n • X iᶜ := (smul_set_mono (hXYdisj i i).symm.subset_compl_right)
               _ ⊆ Y i := hi
               
         _ ⊆ X' i := Set.subset_union_right _ _

Changes in mathlib4

mathlib3
mathlib4
chore: adapt to multiple goal linter 1 (#12338)

A PR accompanying #12339.

Zulip discussion

Diff
@@ -350,8 +350,8 @@ def cons {i} (m : M i) (w : Word M) (hmw : w.fstIdx ≠ some i) (h1 : m ≠ 1) :
     ne_one := by
       simp only [List.mem_cons]
       rintro l (rfl | hl)
-      exact h1
-      exact w.ne_one l hl
+      · exact h1
+      · exact w.ne_one l hl
     chain_ne := w.chain_ne.cons' (fstIdx_ne_iff.mp hmw) }
 
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
@@ -809,8 +809,8 @@ def replaceHead : ∀ {i j : ι} (x : M i) (_hnotone : x ≠ 1) (_w : NeWord M i
 theorem replaceHead_head {i j : ι} (x : M i) (hnotone : x ≠ 1) (w : NeWord M i j) :
     (replaceHead x hnotone w).head = x := by
   induction w
-  rfl
-  simp [*]
+  · rfl
+  · simp [*]
 #align free_product.neword.replace_head_head Monoid.CoprodI.NeWord.replaceHead_head
 
 /-- One can multiply an element from the left to a non-empty reduced word if it does not cancel
@@ -823,8 +823,8 @@ def mulHead {i j : ι} (w : NeWord M i j) (x : M i) (hnotone : x * w.head ≠ 1)
 theorem mulHead_head {i j : ι} (w : NeWord M i j) (x : M i) (hnotone : x * w.head ≠ 1) :
     (mulHead w x hnotone).head = x * w.head := by
   induction w
-  rfl
-  simp [*]
+  · rfl
+  · simp [*]
 #align free_product.neword.mul_head_head Monoid.CoprodI.NeWord.mulHead_head
 
 @[simp]
@@ -1018,8 +1018,8 @@ instance {ι : Type*} (G : ι → Type*) [∀ i, Group (G i)] [∀ i, IsFreeGrou
 def _root_.freeGroupEquivCoprodI {ι : Type u_1} :
     FreeGroup ι ≃* CoprodI fun _ : ι => FreeGroup Unit := by
   refine' MonoidHom.toMulEquiv _ _ _ _
-  exact FreeGroup.lift fun i => @CoprodI.of ι _ _ i (FreeGroup.of Unit.unit)
-  exact CoprodI.lift fun i => FreeGroup.lift fun _ => FreeGroup.of i
+  · exact FreeGroup.lift fun i => @CoprodI.of ι _ _ i (FreeGroup.of Unit.unit)
+  · exact CoprodI.lift fun i => FreeGroup.lift fun _ => FreeGroup.of i
   · ext; simp
   · ext i a; cases a; simp
 #align free_group_equiv_free_product freeGroupEquivCoprodI
@@ -1068,18 +1068,18 @@ theorem _root_.FreeGroup.injective_lift_of_ping_pong : Function.Injective (FreeG
   let f : ∀ i, H i →* G := fun i => FreeGroup.lift fun _ => a i
   let X' : ι → Set α := fun i => X i ∪ Y i
   apply lift_injective_of_ping_pong f _ X'
-  show ∀ i, (X' i).Nonempty
-  · exact fun i => Set.Nonempty.inl (hXnonempty i)
-  show Pairwise fun i j => Disjoint (X' i) (X' j)
-  · intro i j hij
+  · show ∀ i, (X' i).Nonempty
+    exact fun i => Set.Nonempty.inl (hXnonempty i)
+  · show Pairwise fun i j => Disjoint (X' i) (X' j)
+    intro i j hij
     simp only [X']
     apply Disjoint.union_left <;> apply Disjoint.union_right
     · exact hXdisj hij
     · exact hXYdisj i j
     · exact (hXYdisj j i).symm
     · exact hYdisj hij
-  show Pairwise fun i j => ∀ h : H i, h ≠ 1 → f i h • X' j ⊆ X' i
-  · rintro i j hij
+  · show Pairwise fun i j => ∀ h : H i, h ≠ 1 → f i h • X' j ⊆ X' i
+    rintro i j hij
     -- use free_group unit ≃ ℤ
     refine' FreeGroup.freeGroupUnitEquivInt.forall_congr_left'.mpr _
     intro n hne1
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
@@ -758,7 +758,7 @@ theorem of_word (w : Word M) (h : w ≠ empty) : ∃ (i j : _) (w' : NeWord M i
       obtain ⟨i, j, w', hw' : w'.toList = y::l⟩ := hi
       obtain rfl : y = ⟨i, w'.head⟩ := by simpa [hw'] using w'.toList_head?
       refine' ⟨x.1, j, append (singleton x.2 hnot1.1) hchain.1 w', _⟩
-      · simpa [toWord] using hw'
+      simpa [toWord] using hw'
 #align free_product.neword.of_word Monoid.CoprodI.NeWord.of_word
 
 /-- A non-empty reduced word determines an element of the free product, given by multiplication. -/
@@ -986,10 +986,10 @@ theorem lift_injective_of_ping_pong : Function.Injective (lift f) := by
   classical
     apply (injective_iff_map_eq_one (lift f)).mpr
     rw [(CoprodI.Word.equiv).forall_congr_left']
-    · intro w Heq
-      dsimp [Word.equiv] at *
-      · rw [empty_of_word_prod_eq_one f hcard X hXnonempty hXdisj hpp Heq]
-        rfl
+    intro w Heq
+    dsimp [Word.equiv] at *
+    rw [empty_of_word_prod_eq_one f hcard X hXnonempty hXdisj hpp Heq]
+    rfl
 #align free_product.lift_injective_of_ping_pong Monoid.CoprodI.lift_injective_of_ping_pong
 
 end PingPongLemma
@@ -1134,13 +1134,13 @@ theorem _root_.FreeGroup.injective_lift_of_ping_pong : Function.Injective (FreeG
               _ ⊆ Y i := hi
         _ ⊆ X' i := Set.subset_union_right _ _
   show _ ∨ ∃ i, 3 ≤ #(H i)
-  · inhabit ι
-    right
-    use Inhabited.default
-    simp only [H]
-    rw [FreeGroup.freeGroupUnitEquivInt.cardinal_eq, Cardinal.mk_denumerable]
-    apply le_of_lt
-    exact nat_lt_aleph0 3
+  inhabit ι
+  right
+  use Inhabited.default
+  simp only [H]
+  rw [FreeGroup.freeGroupUnitEquivInt.cardinal_eq, Cardinal.mk_denumerable]
+  apply le_of_lt
+  exact nat_lt_aleph0 3
 #align free_group.injective_lift_of_ping_pong FreeGroup.injective_lift_of_ping_pong
 
 end PingPongLemma
feat(GroupTheory): add lemmas about Submonoid.closure and CoprodI (#12391)
  • Add CoprodI.lift_comp_of, CoprodI.lift_comp_of', CoprodI.lift_of', CoprodI.iSup_mrange_of, CoprodI.mclosure_iUnion_range_of, CoprodI.induction_left
  • Add MonoidHom.mrange_id, MonoidHom.mclosure_range, as well as additive versions.
Diff
@@ -6,6 +6,7 @@ Authors: David Wärn, Joachim Breitner
 import Mathlib.Algebra.FreeMonoid.Basic
 import Mathlib.GroupTheory.Congruence
 import Mathlib.GroupTheory.FreeGroup.IsFreeGroup
+import Mathlib.GroupTheory.Submonoid.Membership
 import Mathlib.Data.List.Chain
 import Mathlib.SetTheory.Cardinal.Basic
 import Mathlib.Data.Set.Pointwise.SMul
@@ -173,24 +174,22 @@ def lift : (∀ i, M i →* N) ≃ (CoprodI M →* N) where
 #align free_product.lift Monoid.CoprodI.lift
 
 @[simp]
-theorem lift_of {N} [Monoid N] (fi : ∀ i, M i →* N) {i} (m : M i) : lift fi (of m) = fi i m := by
-  conv_rhs => rw [← lift.symm_apply_apply fi, lift_symm_apply, MonoidHom.comp_apply]
+theorem lift_comp_of {N} [Monoid N] (fi : ∀ i, M i →* N) i : (lift fi).comp of = fi i :=
+  congr_fun (lift.symm_apply_apply fi) i
+
+@[simp]
+theorem lift_of {N} [Monoid N] (fi : ∀ i, M i →* N) {i} (m : M i) : lift fi (of m) = fi i m :=
+  DFunLike.congr_fun (lift_comp_of ..) m
 #align free_product.lift_of Monoid.CoprodI.lift_of
 
-@[elab_as_elim]
-theorem induction_on {C : CoprodI M → Prop} (m : CoprodI M) (h_one : C 1)
-    (h_of : ∀ (i) (m : M i), C (of m)) (h_mul : ∀ x y, C x → C y → C (x * y)) : C m := by
-  let S : Submonoid (CoprodI M) :=
-    { carrier := setOf C
-      mul_mem' := h_mul _ _
-      one_mem' := h_one }
-  have : C _ := Subtype.prop (lift (fun i => of.codRestrict S (h_of i)) m)
-  convert this
-  change MonoidHom.id _ m = S.subtype.comp _ m
-  congr
-  ext i
-  rfl
-#align free_product.induction_on Monoid.CoprodI.induction_on
+@[simp]
+theorem lift_comp_of' {N} [Monoid N] (f : CoprodI M →* N) :
+    lift (fun i ↦ f.comp (of (i := i))) = f :=
+  lift.apply_symm_apply f
+
+@[simp]
+theorem lift_of' : lift (fun i ↦ (of : M i →* CoprodI M)) = .id (CoprodI M) :=
+  lift_comp_of' (.id _)
 
 theorem of_leftInverse [DecidableEq ι] (i : ι) :
     Function.LeftInverse (lift <| Pi.mulSingle i (MonoidHom.id (M i))) of := fun x => by
@@ -201,25 +200,44 @@ theorem of_injective (i : ι) : Function.Injective (of : M i →* _) := by
   classical exact (of_leftInverse i).injective
 #align free_product.of_injective Monoid.CoprodI.of_injective
 
-theorem lift_mrange_le {N} [Monoid N] (f : ∀ i, M i →* N) {s : Submonoid N}
-    (h : ∀ i, MonoidHom.mrange (f i) ≤ s) : MonoidHom.mrange (lift f) ≤ s := by
-  rintro _ ⟨x, rfl⟩
-  induction' x using CoprodI.induction_on with i x x y hx hy
-  · exact s.one_mem
-  · simp only [lift_of, SetLike.mem_coe]
-    exact h i (Set.mem_range_self x)
-  · simp only [map_mul, SetLike.mem_coe]
-    exact s.mul_mem hx hy
-#align free_product.lift_mrange_le Monoid.CoprodI.lift_mrange_le
-
 theorem mrange_eq_iSup {N} [Monoid N] (f : ∀ i, M i →* N) :
     MonoidHom.mrange (lift f) = ⨆ i, MonoidHom.mrange (f i) := by
-  apply le_antisymm (lift_mrange_le f fun i => le_iSup (fun i => MonoidHom.mrange (f i)) i)
-  apply iSup_le _
-  rintro i _ ⟨x, rfl⟩
-  exact ⟨of x, by simp only [lift_of]⟩
+  rw [lift, Equiv.coe_fn_mk, Con.lift_range, FreeMonoid.mrange_lift,
+    range_sigma_eq_iUnion_range, Submonoid.closure_iUnion]
+  simp only [MonoidHom.mclosure_range]
 #align free_product.mrange_eq_supr Monoid.CoprodI.mrange_eq_iSup
 
+theorem lift_mrange_le {N} [Monoid N] (f : ∀ i, M i →* N) {s : Submonoid N} :
+    MonoidHom.mrange (lift f) ≤ s ↔ ∀ i, MonoidHom.mrange (f i) ≤ s := by
+  simp [mrange_eq_iSup]
+#align free_product.lift_mrange_le Monoid.CoprodI.lift_mrange_le
+
+@[simp]
+theorem iSup_mrange_of : ⨆ i, MonoidHom.mrange (of : M i →* CoprodI M) = ⊤ := by
+  simp [← mrange_eq_iSup]
+
+@[simp]
+theorem mclosure_iUnion_range_of :
+    Submonoid.closure (⋃ i, Set.range (of : M i →* CoprodI M)) = ⊤ := by
+  simp [Submonoid.closure_iUnion]
+
+@[elab_as_elim]
+theorem induction_left {C : CoprodI M → Prop} (m : CoprodI M) (one : C 1)
+    (mul : ∀ {i} (m : M i) x, C x → C (of m * x)) : C m := by
+  induction m using Submonoid.induction_of_closure_eq_top_left mclosure_iUnion_range_of with
+  | one => exact one
+  | mul x hx y ihy =>
+    obtain ⟨i, m, rfl⟩ : ∃ (i : ι) (m : M i), of m = x := by simpa using hx
+    exact mul m y ihy
+
+@[elab_as_elim]
+theorem induction_on {C : CoprodI M → Prop} (m : CoprodI M) (h_one : C 1)
+    (h_of : ∀ (i) (m : M i), C (of m)) (h_mul : ∀ x y, C x → C y → C (x * y)) : C m := by
+  induction m using CoprodI.induction_left with
+  | one => exact h_one
+  | mul m x hx => exact h_mul _ _ (h_of _ _) hx
+#align free_product.induction_on Monoid.CoprodI.induction_on
+
 section Group
 
 variable (G : ι → Type*) [∀ i, Group (G i)]
chore: superfluous parentheses part 2 (#12131)

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

Diff
@@ -879,7 +879,7 @@ theorem lift_word_ping_pong {i j k} (w : NeWord H i j) (hk : j ≠ k) :
   · calc
       lift f (NeWord.append w₁ hne w₂).prod • X k = lift f w₁.prod • lift f w₂.prod • X k := by
         simp [MulAction.mul_smul]
-      _ ⊆ lift f w₁.prod • X _ := (set_smul_subset_set_smul_iff.mpr (hIw₂ hk))
+      _ ⊆ lift f w₁.prod • X _ := set_smul_subset_set_smul_iff.mpr (hIw₂ hk)
       _ ⊆ X i := hIw₁ hne
 #align free_product.lift_word_ping_pong Monoid.CoprodI.lift_word_ping_pong
 
@@ -1090,9 +1090,9 @@ theorem _root_.FreeGroup.injective_lift_of_ping_pong : Function.Injective (FreeG
             intro n _hle hi
             calc
               a i ^ (n + 1) • (Y i)ᶜ = (a i ^ n * a i) • (Y i)ᶜ := by rw [zpow_add, zpow_one]
-              _ = a i ^ n • a i • (Y i)ᶜ := (MulAction.mul_smul _ _ _)
-              _ ⊆ a i ^ n • X i := (smul_set_mono <| hX i)
-              _ ⊆ a i ^ n • (Y i)ᶜ := (smul_set_mono (hXYdisj i i).subset_compl_right)
+              _ = a i ^ n • a i • (Y i)ᶜ := MulAction.mul_smul _ _ _
+              _ ⊆ a i ^ n • X i := smul_set_mono <| hX i
+              _ ⊆ a i ^ n • (Y i)ᶜ := smul_set_mono (hXYdisj i i).subset_compl_right
               _ ⊆ X i := hi
         _ ⊆ X' i := Set.subset_union_left _ _
     · have h1n : n ≤ -1 := by
@@ -1110,9 +1110,9 @@ theorem _root_.FreeGroup.injective_lift_of_ping_pong : Function.Injective (FreeG
             intro n _ hi
             calc
               a i ^ (n - 1) • (X i)ᶜ = (a i ^ n * (a i)⁻¹) • (X i)ᶜ := by rw [zpow_sub, zpow_one]
-              _ = a i ^ n • (a i)⁻¹ • (X i)ᶜ := (MulAction.mul_smul _ _ _)
-              _ ⊆ a i ^ n • Y i := (smul_set_mono <| hY i)
-              _ ⊆ a i ^ n • (X i)ᶜ := (smul_set_mono (hXYdisj i i).symm.subset_compl_right)
+              _ = a i ^ n • (a i)⁻¹ • (X i)ᶜ := MulAction.mul_smul _ _ _
+              _ ⊆ a i ^ n • Y i := smul_set_mono <| hY i
+              _ ⊆ a i ^ n • (X i)ᶜ := smul_set_mono (hXYdisj i i).symm.subset_compl_right
               _ ⊆ Y i := hi
         _ ⊆ X' i := Set.subset_union_right _ _
   show _ ∨ ∃ i, 3 ≤ #(H i)
chore: classify porting notes referring to missing linters (#12098)

Reference the newly created issues #12094 and #12096, as well as the pre-existing #5171. Change all references to #10927 to #5171. Some of these changes were not labelled as "porting note"; change this for good measure.

Diff
@@ -641,7 +641,7 @@ variable (M)
 /-- A `NeWord M i j` is a representation of a non-empty reduced words where the first letter comes
 from `M i` and the last letter comes from `M j`. It can be constructed from singletons and via
 concatenation, and thus provides a useful induction principle. -/
---@[nolint has_nonempty_instance] Porting note: commented out
+--@[nolint has_nonempty_instance] Porting note(#5171): commented out
 inductive NeWord : ι → ι → Type _
   | singleton : ∀ {i : ι} (x : M i), x ≠ 1 → NeWord i i
   | append : ∀ {i j k l} (_w₁ : NeWord i j) (_hne : j ≠ k) (_w₂ : NeWord k l), NeWord i l
chore(*): remove empty lines between variable statements (#11418)

Empty lines were removed by executing the following Python script twice

import os
import re


# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
  for filename in files:
    if filename.endswith('.lean'):
      file_path = os.path.join(dir_path, filename)

      # Open the file and read its contents
      with open(file_path, 'r') as file:
        content = file.read()

      # Use a regular expression to replace sequences of "variable" lines separated by empty lines
      # with sequences without empty lines
      modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)

      # Write the modified content back to the file
      with open(file_path, 'w') as file:
        file.write(modified_content)
Diff
@@ -322,7 +322,6 @@ instance (i : ι) : Inhabited (Pair M i) :=
   ⟨⟨1, empty, by tauto⟩⟩
 
 variable {M}
-
 variable [∀ i, DecidableEq (M i)]
 
 /-- Construct a new `Word` without any reduction. The underlying list of
@@ -859,11 +858,8 @@ open Pointwise
 open Cardinal
 
 variable [hnontriv : Nontrivial ι]
-
 variable {G : Type*} [Group G]
-
 variable {H : ι → Type*} [∀ i, Group (H i)]
-
 variable (f : ∀ i, H i →* G)
 
 -- We need many groups or one group with many elements
@@ -871,13 +867,9 @@ variable (hcard : 3 ≤ #ι ∨ ∃ i, 3 ≤ #(H i))
 
 -- A group action on α, and the ping-pong sets
 variable {α : Type*} [MulAction G α]
-
 variable (X : ι → Set α)
-
 variable (hXnonempty : ∀ i, (X i).Nonempty)
-
 variable (hXdisj : Pairwise fun i j => Disjoint (X i) (X j))
-
 variable (hpp : Pairwise fun i j => ∀ h : H i, h ≠ 1 → f i h • X j ⊆ X i)
 
 theorem lift_word_ping_pong {i j k} (w : NeWord H i j) (hk : j ≠ k) :
@@ -1019,24 +1011,16 @@ section PingPongLemma
 open Pointwise Cardinal
 
 variable [Nontrivial ι]
-
 variable {G : Type u_1} [Group G] (a : ι → G)
 
 -- A group action on α, and the ping-pong sets
 variable {α : Type*} [MulAction G α]
-
 variable (X Y : ι → Set α)
-
 variable (hXnonempty : ∀ i, (X i).Nonempty)
-
 variable (hXdisj : Pairwise fun i j => Disjoint (X i) (X j))
-
 variable (hYdisj : Pairwise fun i j => Disjoint (Y i) (Y j))
-
 variable (hXYdisj : ∀ i j, Disjoint (X i) (Y j))
-
 variable (hX : ∀ i, a i • (Y i)ᶜ ⊆ X i)
-
 variable (hY : ∀ i, a⁻¹ i • (X i)ᶜ ⊆ Y i)
 
 /-- The Ping-Pong-Lemma.
style: homogenise porting notes (#11145)

Homogenises porting notes via capitalisation and addition of whitespace.

It makes the following changes:

  • converts "--porting note" into "-- Porting note";
  • converts "porting note" into "Porting note".
Diff
@@ -97,7 +97,7 @@ inductive Monoid.CoprodI.Rel : FreeMonoid (Σi, M i) → FreeMonoid (Σi, M i) 
 def Monoid.CoprodI : Type _ := (conGen (Monoid.CoprodI.Rel M)).Quotient
 #align free_product Monoid.CoprodI
 
---Porting note: could not de derived
+-- Porting note: could not de derived
 instance : Monoid (Monoid.CoprodI M) :=
   by delta Monoid.CoprodI; infer_instance
 
@@ -135,7 +135,7 @@ theorem of_apply {i} (m : M i) : of m = Con.mk' _ (FreeMonoid.of <| Sigma.mk i m
 variable {N : Type*} [Monoid N]
 
 /-- See note [partially-applied ext lemmas]. -/
---Porting note: higher `ext` priority
+-- Porting note: higher `ext` priority
 @[ext 1100]
 theorem ext_hom (f g : CoprodI M →* N) (h : ∀ i, f.comp (of : M i →* _) = g.comp of) : f = g :=
   (MonoidHom.cancel_right Con.mk'_surjective).mp <|
chore: prepare Lean version bump with explicit simp (#10999)

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

Diff
@@ -917,7 +917,7 @@ theorem lift_word_prod_nontrivial_of_head_card {i j} (w : NeWord H i j) (hcard :
     lift_word_prod_nontrivial_of_head_eq_last f X hXnonempty hXdisj hpp w'
   intro heq1
   apply hw'
-  simp [heq1]
+  simp [w', heq1]
 #align free_product.lift_word_prod_nontrivial_of_head_card Monoid.CoprodI.lift_word_prod_nontrivial_of_head_card
 
 theorem lift_word_prod_nontrivial_of_not_empty {i j} (w : NeWord H i j) : lift f w.prod ≠ 1 := by
@@ -950,7 +950,7 @@ theorem lift_word_prod_nontrivial_of_not_empty {i j} (w : NeWord H i j) : lift f
           lift_word_prod_nontrivial_of_head_eq_last f X hXnonempty hXdisj hpp w'
         intro heq1
         apply hw'
-        simp [heq1]
+        simp [w', heq1]
 #align free_product.lift_word_prod_nontrivial_of_not_empty Monoid.CoprodI.lift_word_prod_nontrivial_of_not_empty
 
 theorem empty_of_word_prod_eq_one {w : Word H} (h : lift f w.prod = 1) : w = Word.empty := by
@@ -1070,7 +1070,7 @@ theorem _root_.FreeGroup.injective_lift_of_ping_pong : Function.Injective (FreeG
   · exact fun i => Set.Nonempty.inl (hXnonempty i)
   show Pairwise fun i j => Disjoint (X' i) (X' j)
   · intro i j hij
-    simp only
+    simp only [X']
     apply Disjoint.union_left <;> apply Disjoint.union_right
     · exact hXdisj hij
     · exact hXYdisj i j
@@ -1087,9 +1087,9 @@ theorem _root_.FreeGroup.injective_lift_of_ping_pong : Function.Injective (FreeG
     have hnne0 : n ≠ 0 := by
       rintro rfl
       apply hne1
-      simp; rfl
+      simp [H]; rfl
     clear hne1
-    simp only
+    simp only [X']
     -- Positive and negative powers separately
     cases' (lt_or_gt_of_ne hnne0).symm with hlt hgt
     · have h1n : 1 ≤ n := hlt
@@ -1135,7 +1135,7 @@ theorem _root_.FreeGroup.injective_lift_of_ping_pong : Function.Injective (FreeG
   · inhabit ι
     right
     use Inhabited.default
-    simp only
+    simp only [H]
     rw [FreeGroup.freeGroupUnitEquivInt.cardinal_eq, Cardinal.mk_denumerable]
     apply le_of_lt
     exact nat_lt_aleph0 3
chore: remove stream-of-consciousness uses of have, replace and suffices (#10640)

No changes to tactic file, it's just boring fixes throughout the library.

This follows on from #6964.

Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>

Diff
@@ -724,8 +724,8 @@ def toWord {i j} (w : NeWord M i j) : Word M
 
 /-- Every nonempty `Word M` can be constructed as a `NeWord M i j` -/
 theorem of_word (w : Word M) (h : w ≠ empty) : ∃ (i j : _) (w' : NeWord M i j), w'.toWord = w := by
-  suffices : ∃ (i j : _) (w' : NeWord M i j), w'.toWord.toList = w.toList
-  · rcases this with ⟨i, j, w, h⟩
+  suffices ∃ (i j : _) (w' : NeWord M i j), w'.toWord.toList = w.toList by
+    rcases this with ⟨i, j, w, h⟩
     refine' ⟨i, j, w, _⟩
     ext
     rw [h]
chore: remove include/omit porting notes (#10517)

See this Zulip discussion.

Diff
@@ -880,8 +880,6 @@ variable (hXdisj : Pairwise fun i j => Disjoint (X i) (X j))
 
 variable (hpp : Pairwise fun i j => ∀ h : H i, h ≠ 1 → f i h • X j ⊆ X i)
 
---include hpp Porting note: commented out
-
 theorem lift_word_ping_pong {i j k} (w : NeWord H i j) (hk : j ≠ k) :
     lift f w.prod • X k ⊆ X i := by
   induction' w with i x hne_one i j k l w₁ hne w₂ hIw₁ hIw₂ generalizing k
@@ -893,8 +891,6 @@ theorem lift_word_ping_pong {i j k} (w : NeWord H i j) (hk : j ≠ k) :
       _ ⊆ X i := hIw₁ hne
 #align free_product.lift_word_ping_pong Monoid.CoprodI.lift_word_ping_pong
 
---include X hXnonempty hXdisj Porting note: commented out
-
 theorem lift_word_prod_nontrivial_of_other_i {i j k} (w : NeWord H i j) (hhead : k ≠ i)
     (hlast : k ≠ j) : lift f w.prod ≠ 1 := by
   intro heq1
@@ -903,8 +899,6 @@ theorem lift_word_prod_nontrivial_of_other_i {i j k} (w : NeWord H i j) (hhead :
   exact (hXdisj hhead).le_bot ⟨hx, this hx⟩
 #align free_product.lift_word_prod_nontrivial_of_other_i Monoid.CoprodI.lift_word_prod_nontrivial_of_other_i
 
---include hnontriv Porting note: commented out
-
 theorem lift_word_prod_nontrivial_of_head_eq_last {i} (w : NeWord H i i) : lift f w.prod ≠ 1 := by
   obtain ⟨k, hk⟩ := exists_ne i
   exact lift_word_prod_nontrivial_of_other_i f X hXnonempty hXdisj hpp w hk hk
@@ -926,8 +920,6 @@ theorem lift_word_prod_nontrivial_of_head_card {i j} (w : NeWord H i j) (hcard :
   simp [heq1]
 #align free_product.lift_word_prod_nontrivial_of_head_card Monoid.CoprodI.lift_word_prod_nontrivial_of_head_card
 
---include hcard Porting note: commented out
-
 theorem lift_word_prod_nontrivial_of_not_empty {i j} (w : NeWord H i j) : lift f w.prod ≠ 1 := by
   classical
     cases' hcard with hcard hcard
@@ -1047,8 +1039,6 @@ variable (hX : ∀ i, a i • (Y i)ᶜ ⊆ X i)
 
 variable (hY : ∀ i, a⁻¹ i • (X i)ᶜ ⊆ Y i)
 
---include hXnonempty hXdisj hYdisj hXYdisj hX hY Porting note: commented out
-
 /-- The Ping-Pong-Lemma.
 
 Given a group action of `G` on `X` so that the generators of the free groups act in specific
chore: reduce imports (#9830)

This uses the improved shake script from #9772 to reduce imports across mathlib. The corresponding noshake.json file has been added to #9772.

Co-authored-by: Mario Carneiro <di.gama@gmail.com>

Diff
@@ -7,7 +7,7 @@ import Mathlib.Algebra.FreeMonoid.Basic
 import Mathlib.GroupTheory.Congruence
 import Mathlib.GroupTheory.FreeGroup.IsFreeGroup
 import Mathlib.Data.List.Chain
-import Mathlib.SetTheory.Cardinal.Ordinal
+import Mathlib.SetTheory.Cardinal.Basic
 import Mathlib.Data.Set.Pointwise.SMul
 
 #align_import group_theory.free_product from "leanprover-community/mathlib"@"9114ddffa023340c9ec86965e00cdd6fe26fcdf6"
chore: Remove nonterminal simp at (#7795)

Removes nonterminal uses of simp at. Replaces most of these with instances of simp? ... says.

Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Mario Carneiro <di.gama@gmail.com>

Diff
@@ -818,7 +818,8 @@ theorem mulHead_prod {i j : ι} (w : NeWord M i j) (x : M i) (hnotone : x * w.he
   · simp [mulHead, replaceHead]
   · specialize w_ih_w₁ _ hnotone
     clear w_ih_w₂
-    simp [replaceHead, ← mul_assoc] at *
+    simp? [replaceHead, ← mul_assoc] at * says
+      simp only [replaceHead, head, append_prod, ← mul_assoc] at *
     congr 1
 #align free_product.neword.mul_head_prod Monoid.CoprodI.NeWord.mulHead_prod
 
doc: Mark named theorems (#8749)
Diff
@@ -966,7 +966,7 @@ theorem empty_of_word_prod_eq_one {w : Word H} (h : lift f w.prod = 1) : w = Wor
   exact lift_word_prod_nontrivial_of_not_empty f hcard X hXnonempty hXdisj hpp w h
 #align free_product.empty_of_word_prod_eq_one Monoid.CoprodI.empty_of_word_prod_eq_one
 
-/-- The Ping-Pong-Lemma.
+/-- The **Ping-Pong-Lemma**.
 
 Given a group action of `G` on `X` so that the `H i` acts in a specific way on disjoint subsets
 `X i` we can prove that `lift f` is injective, and thus the image of `lift f` is isomorphic to the
chore(GroupTheory/Congruence): small cleanups (#8314)

Switches to where notation in a couple of places and removes a default lt field.

Also replaces uses of .r with coeFn, since the latter is declared simp-normal by this file.

Diff
@@ -152,7 +152,7 @@ def lift : (∀ i, M i →* N) ≃ (CoprodI M →* N) where
   toFun fi :=
     Con.lift _ (FreeMonoid.lift fun p : Σi, M i => fi p.fst p.snd) <|
       Con.conGen_le <| by
-        simp_rw [Con.rel_eq_coe, Con.ker_rel]
+        simp_rw [Con.ker_rel]
         rintro _ _ (i | ⟨x, y⟩)
         · change FreeMonoid.lift _ (FreeMonoid.of _) = FreeMonoid.lift _ 1
           simp only [MonoidHom.map_one, FreeMonoid.lift_eval_of]
feat: change IsFreeGroup to a Prop (#7698)

Currently, the class IsFreeGroup contains data (namely, a specific set of generators). This is bad, as there are many sets of generators in a free group, and changing sets of generators happens all the time in geometric group theory. We switch to a design in which

  • we define FreeGroupBasis, following the definition and API of bases of vector spaces. Most existing API around IsFreeGroup is transferred to lemmas taking a free group basis as a variable.
  • The typeclass IsFreeGroup is Prop-valued, and requires only the existence of a free group basis.
Diff
@@ -991,21 +991,22 @@ theorem lift_injective_of_ping_pong : Function.Injective (lift f) := by
 
 end PingPongLemma
 
-/-- The free product of free groups is itself a free group -/
-@[simps!]  --Porting note: added `!`
-instance {ι : Type*} (G : ι → Type*) [∀ i, Group (G i)] [hG : ∀ i, IsFreeGroup (G i)] :
-    IsFreeGroup (CoprodI G) where
-  Generators := Σi, IsFreeGroup.Generators (G i)
-  MulEquiv' :=
-    MonoidHom.toMulEquiv
-      (FreeGroup.lift fun x : Σi, IsFreeGroup.Generators (G i) =>
-        CoprodI.of (IsFreeGroup.of x.2 : G x.1))
-      (CoprodI.lift fun i : ι =>
-        (IsFreeGroup.lift fun x : IsFreeGroup.Generators (G i) =>
-            FreeGroup.of (⟨i, x⟩ : Σi, IsFreeGroup.Generators (G i)) :
-          G i →* FreeGroup (Σi, IsFreeGroup.Generators (G i))))
-      (by ext; simp)
-      (by ext; simp)
+/-- Given a family of free groups with distinguished bases, then their free product is free, with
+a basis given by the union of the bases of the components. -/
+def FreeGroupBasis.coprodI {ι : Type*} {X : ι → Type*} {G : ι → Type*} [∀ i, Group (G i)]
+    (B : ∀ i, FreeGroupBasis (X i) (G i)) :
+    FreeGroupBasis (Σ i, X i) (CoprodI G) :=
+  ⟨MulEquiv.symm <| MonoidHom.toMulEquiv
+    (FreeGroup.lift fun x : Σ i, X i => CoprodI.of (B x.1 x.2))
+    (CoprodI.lift fun i : ι => (B i).lift fun x : X i =>
+              FreeGroup.of (⟨i, x⟩ : Σ i, X i))
+    (by ext; simp)
+    (by ext1 i; apply (B i).ext_hom; simp)⟩
+
+/-- The free product of free groups is itself a free group. -/
+instance {ι : Type*} (G : ι → Type*) [∀ i, Group (G i)] [∀ i, IsFreeGroup (G i)] :
+    IsFreeGroup (CoprodI G) :=
+  (FreeGroupBasis.coprodI (fun i ↦ IsFreeGroup.basis (G i))).isFreeGroup
 
 -- NB: One might expect this theorem to be phrased with ℤ, but ℤ is an additive group,
 -- and using `Multiplicative ℤ` runs into diamond issues.
chore: remove nonterminal simp (#7580)

Removes nonterminal simps on lines looking like simp [...]

Diff
@@ -377,7 +377,7 @@ theorem rcons_inj {i} : Function.Injective (rcons : Pair M i → Word M) := by
 theorem mem_rcons_iff {i j : ι} (p : Pair M i) (m : M j) :
     ⟨_, m⟩ ∈ (rcons p).toList ↔ ⟨_, m⟩ ∈ p.tail.toList ∨
       m ≠ 1 ∧ (∃ h : i = j, m = h ▸ p.head) := by
-  simp [rcons, cons]
+  simp only [rcons._eq_1, cons._eq_1, ne_eq]
   by_cases hij : i = j
   · subst i
     by_cases hm : m = p.head
Revert "chore: revert #7703 (#7710)"

This reverts commit f3695eb2.

Diff
@@ -140,8 +140,9 @@ variable {N : Type*} [Monoid N]
 theorem ext_hom (f g : CoprodI M →* N) (h : ∀ i, f.comp (of : M i →* _) = g.comp of) : f = g :=
   (MonoidHom.cancel_right Con.mk'_surjective).mp <|
     FreeMonoid.hom_eq fun ⟨i, x⟩ => by
-      rw [MonoidHom.comp_apply, MonoidHom.comp_apply, ← of_apply, ← MonoidHom.comp_apply, ←
-        MonoidHom.comp_apply, h]
+      -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+      erw [MonoidHom.comp_apply, MonoidHom.comp_apply, ← of_apply, ← MonoidHom.comp_apply, ←
+        MonoidHom.comp_apply, h]; rfl
 #align free_product.ext_hom Monoid.CoprodI.ext_hom
 
 /-- A map out of the free product corresponds to a family of maps out of the summands. This is the
@@ -163,7 +164,8 @@ def lift : (∀ i, M i →* N) ≃ (CoprodI M →* N) where
   left_inv := by
     intro fi
     ext i x
-    rw [MonoidHom.comp_apply, of_apply, Con.lift_mk', FreeMonoid.lift_eval_of]
+    -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+    erw [MonoidHom.comp_apply, of_apply, Con.lift_mk', FreeMonoid.lift_eval_of]
   right_inv := by
     intro f
     ext i x
chore: revert #7703 (#7710)

This reverts commit 26eb2b0a.

Diff
@@ -140,9 +140,8 @@ variable {N : Type*} [Monoid N]
 theorem ext_hom (f g : CoprodI M →* N) (h : ∀ i, f.comp (of : M i →* _) = g.comp of) : f = g :=
   (MonoidHom.cancel_right Con.mk'_surjective).mp <|
     FreeMonoid.hom_eq fun ⟨i, x⟩ => by
-      -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
-      erw [MonoidHom.comp_apply, MonoidHom.comp_apply, ← of_apply, ← MonoidHom.comp_apply, ←
-        MonoidHom.comp_apply, h]; rfl
+      rw [MonoidHom.comp_apply, MonoidHom.comp_apply, ← of_apply, ← MonoidHom.comp_apply, ←
+        MonoidHom.comp_apply, h]
 #align free_product.ext_hom Monoid.CoprodI.ext_hom
 
 /-- A map out of the free product corresponds to a family of maps out of the summands. This is the
@@ -164,8 +163,7 @@ def lift : (∀ i, M i →* N) ≃ (CoprodI M →* N) where
   left_inv := by
     intro fi
     ext i x
-    -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
-    erw [MonoidHom.comp_apply, of_apply, Con.lift_mk', FreeMonoid.lift_eval_of]
+    rw [MonoidHom.comp_apply, of_apply, Con.lift_mk', FreeMonoid.lift_eval_of]
   right_inv := by
     intro f
     ext i x
chore: bump toolchain to v4.2.0-rc2 (#7703)

This includes all the changes from #7606.

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

Diff
@@ -140,8 +140,9 @@ variable {N : Type*} [Monoid N]
 theorem ext_hom (f g : CoprodI M →* N) (h : ∀ i, f.comp (of : M i →* _) = g.comp of) : f = g :=
   (MonoidHom.cancel_right Con.mk'_surjective).mp <|
     FreeMonoid.hom_eq fun ⟨i, x⟩ => by
-      rw [MonoidHom.comp_apply, MonoidHom.comp_apply, ← of_apply, ← MonoidHom.comp_apply, ←
-        MonoidHom.comp_apply, h]
+      -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+      erw [MonoidHom.comp_apply, MonoidHom.comp_apply, ← of_apply, ← MonoidHom.comp_apply, ←
+        MonoidHom.comp_apply, h]; rfl
 #align free_product.ext_hom Monoid.CoprodI.ext_hom
 
 /-- A map out of the free product corresponds to a family of maps out of the summands. This is the
@@ -163,7 +164,8 @@ def lift : (∀ i, M i →* N) ≃ (CoprodI M →* N) where
   left_inv := by
     intro fi
     ext i x
-    rw [MonoidHom.comp_apply, of_apply, Con.lift_mk', FreeMonoid.lift_eval_of]
+    -- This used to be `rw`, but we need `erw` after leanprover/lean4#2644
+    erw [MonoidHom.comp_apply, of_apply, Con.lift_mk', FreeMonoid.lift_eval_of]
   right_inv := by
     intro f
     ext i x
refactor: Create FreeGroup folder in GroupTheory (#7334)
Diff
@@ -5,7 +5,7 @@ Authors: David Wärn, Joachim Breitner
 -/
 import Mathlib.Algebra.FreeMonoid.Basic
 import Mathlib.GroupTheory.Congruence
-import Mathlib.GroupTheory.IsFreeGroup
+import Mathlib.GroupTheory.FreeGroup.IsFreeGroup
 import Mathlib.Data.List.Chain
 import Mathlib.SetTheory.Cardinal.Ordinal
 import Mathlib.Data.Set.Pointwise.SMul
style: fix wrapping of where (#7149)
Diff
@@ -222,8 +222,8 @@ section Group
 
 variable (G : ι → Type*) [∀ i, Group (G i)]
 
-instance : Inv (CoprodI G)
-    where inv :=
+instance : Inv (CoprodI G) where
+  inv :=
     MulOpposite.unop ∘ lift fun i => (of : G i →* _).op.comp (MulEquiv.inv' (G i)).toMonoidHom
 
 theorem inv_def (x : CoprodI G) :
style: fix wrapping of where (#7149)
Diff
@@ -178,8 +178,8 @@ section Group
 
 variable (G H : Type*) [Group G] [Group H]
 
-instance : Inv (G ∗ H)
-    where inv :=
+instance : Inv (G ∗ H) where
+  inv :=
     MulOpposite.unop ∘
       lift ((inl : G →* _).op.comp (MulEquiv.inv' G).toMonoidHom)
            ((inr : H →* _).op.comp (MulEquiv.inv' H).toMonoidHom)
feat(GroupTheory/CoprodI): add various things (#6900)

The main changes made here were

  • Adding a cons constructor to make a new word where the underlying list is just cons. Use this to simplify the definition of rcons
  • Defining a consRecOn induction principle and use this to simpllify the definition of equivPairAux, allowing me to delete the private def mkAux
  • Some lemmas about being an element of rcons and smul
Diff
@@ -269,6 +269,7 @@ end Group
 namespace Word
 
 /-- The empty reduced word. -/
+@[simps]
 def empty : Word M where
   toList := []
   ne_one := by simp
@@ -322,38 +323,32 @@ variable {M}
 
 variable [∀ i, DecidableEq (M i)]
 
+/-- Construct a new `Word` without any reduction. The underlying list of
+`cons m w _ _` is `⟨_, m⟩::w`  -/
+@[simps]
+def cons {i} (m : M i) (w : Word M) (hmw : w.fstIdx ≠ some i) (h1 : m ≠ 1) : Word M :=
+  { toList := ⟨i, m⟩ :: w.toList,
+    ne_one := by
+      simp only [List.mem_cons]
+      rintro l (rfl | hl)
+      exact h1
+      exact w.ne_one l hl
+    chain_ne := w.chain_ne.cons' (fstIdx_ne_iff.mp hmw) }
+
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
 /-- Given a pair `(head, tail)`, we can form a word by prepending `head` to `tail`, except if `head`
 is `1 : M i` then we have to just return `Word` since we need the result to be reduced. -/
 def rcons {i} (p : Pair M i) : Word M :=
   if h : p.head = 1 then p.tail
-  else
-    { toList := ⟨i, p.head⟩::p.tail.toList
-      ne_one := by
-        simp only [List.mem_cons]
-        rintro l (rfl | hl)
-        exact h
-        exact p.tail.ne_one l hl
-      chain_ne := p.tail.chain_ne.cons' (fstIdx_ne_iff.mp p.fstIdx_ne) }
+  else cons p.head p.tail p.fstIdx_ne h
 #align free_product.word.rcons Monoid.CoprodI.Word.rcons
 
-/-- Given a word of the form `⟨l :: ls, h1, h2⟩`, we can form a word of the form `⟨ls, _, _⟩`,
-dropping the first letter. -/
-private def mkAux {l} (ls : List (Σi, M i)) (h1 : ∀ l' ∈ l::ls, Sigma.snd l' ≠ 1)
-    (h2 : (l::ls).Chain' (fun l l' => Sigma.fst l ≠ Sigma.fst l')) : Word M :=
-  ⟨ls, fun _ hl => h1 _ (List.mem_cons_of_mem _ hl), h2.tail⟩
-
-theorem cons_eq_rcons {i} {m : M i} {ls h1 h2} :
-    Word.mk (⟨i, m⟩::ls) h1 h2 = rcons ⟨m, mkAux ls h1 h2, fstIdx_ne_iff.mpr h2.rel_head?⟩ := by
-  rw [rcons, dif_neg]
-  rfl
-  exact h1 ⟨i, m⟩ (ls.mem_cons_self _)
-#align free_product.word.cons_eq_rcons Monoid.CoprodI.Word.cons_eq_rcons
+#noalign free_product.word.cons_eq_rcons
 
 @[simp]
 theorem prod_rcons {i} (p : Pair M i) : prod (rcons p) = of p.head * prod p.tail :=
   if hm : p.head = 1 then by rw [rcons, dif_pos hm, hm, MonoidHom.map_one, one_mul]
-  else by rw [rcons, dif_neg hm, prod, List.map_cons, List.prod_cons, prod]
+  else by rw [rcons, dif_neg hm, cons, prod, List.map_cons, List.prod_cons, prod]
 #align free_product.word.prod_rcons Monoid.CoprodI.Word.prod_rcons
 
 theorem rcons_inj {i} : Function.Injective (rcons : Pair M i → Word M) := by
@@ -370,30 +365,80 @@ theorem rcons_inj {i} : Function.Injective (rcons : Pair M i → Word M) := by
     rw [← he] at h'
     exact h' rfl
   · have : m = m' ∧ w.toList = w'.toList := by
-      simpa [rcons, dif_neg hm, dif_neg hm', true_and_iff, eq_self_iff_true, Subtype.mk_eq_mk,
+      simpa [cons, rcons, dif_neg hm, dif_neg hm', true_and_iff, eq_self_iff_true, Subtype.mk_eq_mk,
         heq_iff_eq, ← Subtype.ext_iff_val] using he
     rcases this with ⟨rfl, h⟩
     congr
     exact Word.ext _ _ h
 #align free_product.word.rcons_inj Monoid.CoprodI.Word.rcons_inj
 
+theorem mem_rcons_iff {i j : ι} (p : Pair M i) (m : M j) :
+    ⟨_, m⟩ ∈ (rcons p).toList ↔ ⟨_, m⟩ ∈ p.tail.toList ∨
+      m ≠ 1 ∧ (∃ h : i = j, m = h ▸ p.head) := by
+  simp [rcons, cons]
+  by_cases hij : i = j
+  · subst i
+    by_cases hm : m = p.head
+    · subst m
+      split_ifs <;> simp_all
+    · split_ifs <;> simp_all
+  · split_ifs <;> simp_all [Ne.symm hij]
+
+@[simp]
+theorem fstIdx_cons {i} (m : M i) (w : Word M) (hmw : w.fstIdx ≠ some i) (h1 : m ≠ 1) :
+    fstIdx (cons m w hmw h1) = some i := by simp [cons, fstIdx]
+
+@[simp]
+theorem prod_cons (i) (m : M i) (w : Word M) (h1 : m ≠ 1) (h2 : w.fstIdx ≠ some i) :
+    prod (cons m w h2 h1) = of m * prod w := by
+  simp [cons, prod, List.map_cons, List.prod_cons]
+
+/-- Induct on a word by adding letters one at a time without reduction,
+effectively inducting on the underlying `List`. -/
+@[elab_as_elim]
+def consRecOn {motive : Word M → Sort*} (w : Word M) (h_empty : motive empty)
+    (h_cons : ∀ (i) (m : M i) (w) h1 h2, motive w → motive (cons m w h1 h2)) :
+    motive w := by
+  rcases w with ⟨w, h1, h2⟩
+  induction w with
+  | nil => exact h_empty
+  | cons m w ih =>
+    refine h_cons m.1 m.2 ⟨w, fun _ hl => h1 _ (List.mem_cons_of_mem _ hl), h2.tail⟩ ?_ ?_ (ih _ _)
+    · rw [List.chain'_cons'] at h2
+      simp only [fstIdx, ne_eq, Option.map_eq_some',
+        Sigma.exists, exists_and_right, exists_eq_right, not_exists]
+      intro m' hm'
+      exact h2.1 _ hm' rfl
+    · exact h1 _ (List.mem_cons_self _ _)
+
+@[simp]
+theorem consRecOn_empty {motive : Word M → Sort*} (h_empty : motive empty)
+    (h_cons : ∀ (i) (m : M i) (w) h1 h2, motive w → motive (cons m w h1 h2)) :
+    consRecOn empty h_empty h_cons = h_empty := rfl
+
+@[simp]
+theorem consRecOn_cons {motive : Word M → Sort*} (i) (m : M i) (w : Word M) h1 h2
+    (h_empty : motive empty)
+    (h_cons : ∀ (i) (m : M i) (w) h1 h2, motive w → motive (cons m w h1 h2)) :
+    consRecOn (cons m w h1 h2) h_empty h_cons = h_cons i m w h1 h2
+      (consRecOn w h_empty h_cons) := rfl
+
 variable [DecidableEq ι]
 
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
 -- This definition is computable but not very nice to look at. Thankfully we don't have to inspect
 -- it, since `rcons` is known to be injective.
 /-- Given `i : ι`, any reduced word can be decomposed into a pair `p` such that `w = rcons p`. -/
-private def equivPairAux (i) : ∀ w : Word M, { p : Pair M i // rcons p = w }
-  | w@⟨[], _, _⟩ => ⟨⟨1, w, by subst w; simp [fstIdx]⟩, by subst w; simp [rcons]⟩
-  | w@⟨⟨j, m⟩::ls, h1, h2⟩ =>
-    if ij : i = j then
-      { val :=
-          { head := ij.symm.rec m
-            tail := mkAux ls h1 h2
-            fstIdx_ne := by cases ij; exact fstIdx_ne_iff.mpr h2.rel_head? }
-        property := by cases ij; exact cons_eq_rcons.symm }
-    else ⟨⟨1, w, by subst w; exact (Option.some_injective _).ne (Ne.symm ij)⟩,
-      by subst w; simp [rcons]⟩
+private def equivPairAux (i) (w : Word M) : { p : Pair M i // rcons p = w } :=
+  consRecOn w ⟨⟨1, .empty, by simp [fstIdx, empty]⟩, by simp [rcons]⟩ <|
+    fun j m w h1 h2 _ =>
+      if ij : i = j then
+        { val :=
+          { head := ij ▸ m
+            tail := w
+            fstIdx_ne := ij ▸ h1 }
+          property := by subst ij; simp [rcons, h2] }
+      else ⟨⟨1, cons m w h1 h2, by simp [cons, fstIdx, Ne.symm ij]⟩,  by simp [rcons]⟩
 
 /-- The equivalence between words and pairs. Given a word, it decomposes it as a pair by removing
 the first letter if it comes from `M i`. Given a pair, it prepends the head to the tail. -/
@@ -413,6 +458,41 @@ theorem equivPair_eq_of_fstIdx_ne {i} {w : Word M} (h : fstIdx w ≠ some i) :
   (equivPair i).apply_eq_iff_eq_symm_apply.mpr <| Eq.symm (dif_pos rfl)
 #align free_product.word.equiv_pair_eq_of_fst_idx_ne Monoid.CoprodI.Word.equivPair_eq_of_fstIdx_ne
 
+theorem mem_equivPair_tail_iff {i j : ι} {w : Word M} (m : M i) :
+    (⟨i, m⟩ ∈ (equivPair j w).tail.toList) ↔ ⟨i, m⟩ ∈ w.toList.tail
+      ∨ i ≠ j ∧ ∃ h : w.toList ≠ [], w.toList.head h = ⟨i, m⟩ := by
+  simp only [equivPair, equivPairAux, ne_eq, Equiv.coe_fn_mk]
+  induction w using consRecOn with
+  | h_empty => simp
+  | h_cons k g tail h1 h2 ih =>
+    simp only [consRecOn_cons]
+    split_ifs with h
+    · subst k
+      by_cases hij : j = i <;> simp_all
+    · by_cases hik : i = k
+      · subst i; simp_all [eq_comm, and_comm, or_comm]
+      · simp [hik, Ne.symm hik]
+
+theorem mem_of_mem_equivPair_tail {i j : ι} {w : Word M} (m : M i) :
+    (⟨i, m⟩ ∈ (equivPair j w).tail.toList) → ⟨i, m⟩ ∈ w.toList := by
+  rw [mem_equivPair_tail_iff]
+  rintro (h | h)
+  · exact List.mem_of_mem_tail h
+  · revert h; cases w.toList <;> simp (config := {contextual := true})
+
+theorem equivPair_head {i : ι} {w : Word M} :
+    (equivPair i w).head =
+      if h : ∃ (h : w.toList ≠ []), (w.toList.head h).1 = i
+      then h.snd ▸ (w.toList.head h.1).2
+      else 1 := by
+  simp only [equivPair, equivPairAux]
+  induction w using consRecOn with
+  | h_empty => simp
+  | h_cons head =>
+    by_cases hi : i = head
+    · subst hi; simp
+    · simp [hi, Ne.symm hi]
+
 instance summandAction (i) : MulAction (M i) (Word M) where
   smul m w := rcons { equivPair i w with head := m * (equivPair i w).head }
   one_smul w := by
@@ -426,27 +506,96 @@ instance summandAction (i) : MulAction (M i) (Word M) where
 instance : MulAction (CoprodI M) (Word M) :=
   MulAction.ofEndHom (lift fun _ => MulAction.toEndHom)
 
+theorem smul_def {i} (m : M i) (w : Word M) :
+    m • w = rcons { equivPair i w with head := m * (equivPair i w).head } :=
+  rfl
+
 theorem of_smul_def (i) (w : Word M) (m : M i) :
     of m • w = rcons { equivPair i w with head := m * (equivPair i w).head } :=
   rfl
 #align free_product.word.of_smul_def Monoid.CoprodI.Word.of_smul_def
 
+theorem equivPair_smul_same {i} (m : M i) (w : Word M) :
+    equivPair i (of m • w) = ⟨m * (equivPair i w).head, (equivPair i w).tail,
+      (equivPair i w).fstIdx_ne⟩ := by
+  rw [of_smul_def, ← equivPair_symm]
+  simp
+
+@[simp]
+theorem equivPair_tail {i} (p : Pair M i) :
+    equivPair i p.tail = ⟨1, p.tail, p.fstIdx_ne⟩ :=
+  equivPair_eq_of_fstIdx_ne _
+
+theorem smul_eq_of_smul {i} (m : M i) (w : Word M) :
+    m • w = of m • w := rfl
+
+theorem mem_smul_iff {i j : ι} {m₁ : M i} {m₂ : M j} {w : Word M} :
+    ⟨_, m₁⟩ ∈ (of m₂ • w).toList ↔
+      (¬i = j ∧ ⟨i, m₁⟩ ∈ w.toList)
+      ∨ (m₁ ≠ 1 ∧ ∃ (hij : i = j),(⟨i, m₁⟩ ∈ w.toList.tail) ∨
+        (∃ m', ⟨j, m'⟩ ∈ w.toList.head? ∧ m₁ = hij ▸ (m₂ * m')) ∨
+        (w.fstIdx ≠ some j ∧ m₁ = hij ▸ m₂)) := by
+  rw [of_smul_def, mem_rcons_iff, mem_equivPair_tail_iff, equivPair_head, or_assoc]
+  by_cases hij : i = j
+  · subst i
+    simp only [not_true, ne_eq, false_and, exists_prop, true_and, false_or]
+    by_cases hw : ⟨j, m₁⟩ ∈ w.toList.tail
+    · simp [hw, show m₁ ≠ 1 from w.ne_one _ (List.mem_of_mem_tail hw)]
+    · simp only [hw, false_or, Option.mem_def, ne_eq, and_congr_right_iff]
+      intro hm1
+      split_ifs with h
+      · rcases h with ⟨hnil, rfl⟩
+        simp only [List.head?_eq_head _ hnil, Option.some.injEq, ne_eq]
+        constructor
+        · rintro rfl
+          exact Or.inl ⟨_, rfl, rfl⟩
+        · rintro (⟨_, h, rfl⟩ | hm')
+          · simp [Sigma.ext_iff] at h
+            subst h
+            rfl
+          · simp only [fstIdx, Option.map_eq_some', Sigma.exists,
+              exists_and_right, exists_eq_right, not_exists, ne_eq] at hm'
+            exact (hm'.1 (w.toList.head hnil).2 (by rw [List.head?_eq_head])).elim
+      · revert h
+        rw [fstIdx]
+        cases w.toList
+        · simp
+        · simp (config := {contextual := true}) [Sigma.ext_iff]
+  · rcases w with ⟨_ | _, _, _⟩ <;>
+    simp [or_comm, hij, Ne.symm hij, eq_comm]
+
+theorem mem_smul_iff_of_ne {i j : ι} (hij : i ≠ j) {m₁ : M i} {m₂ : M j} {w : Word M} :
+    ⟨_, m₁⟩ ∈ (of m₂ • w).toList ↔ ⟨i, m₁⟩ ∈ w.toList := by
+  simp [mem_smul_iff, *]
+
 theorem cons_eq_smul {i} {m : M i} {ls h1 h2} :
-    Word.mk (⟨i, m⟩::ls) h1 h2 = of m • mkAux ls h1 h2 := by
-  rw [cons_eq_rcons, of_smul_def, equivPair_eq_of_fstIdx_ne _]
-  · simp
-  · rw [fstIdx_ne_iff]
-    exact (List.chain'_cons'.1 h2).1
+    cons m ls h1 h2 = of m • ls := by
+  rw [of_smul_def, equivPair_eq_of_fstIdx_ne _]
+  · simp [cons, rcons, h2]
+  · exact h1
 #align free_product.word.cons_eq_smul Monoid.CoprodI.Word.cons_eq_smul
 
+theorem rcons_eq_smul {i} (p : Pair M i) :
+    rcons p = of p.head • p.tail := by
+  simp [of_smul_def]
+
+@[simp]
+theorem equivPair_head_smul_equivPair_tail {i : ι} (w : Word M) :
+    of (equivPair i w).head • (equivPair i w).tail = w := by
+  rw [← rcons_eq_smul, ← equivPair_symm, Equiv.symm_apply_apply]
+
+theorem equivPair_tail_eq_inv_smul {G : ι → Type*} [∀ i, Group (G i)]
+    [∀i, DecidableEq (G i)] {i} (w : Word G) :
+    (equivPair i w).tail = (of (equivPair i w).head)⁻¹ • w :=
+  Eq.symm <| inv_smul_eq_iff.2 (equivPair_head_smul_equivPair_tail w).symm
+
 theorem smul_induction {C : Word M → Prop} (h_empty : C empty)
     (h_smul : ∀ (i) (m : M i) (w), C w → C (of m • w)) (w : Word M) : C w := by
-  cases' w with ls h1 h2
-  induction' ls with l ls ih
-  · exact h_empty
-  cases' l with i m
-  rw [cons_eq_smul]
-  exact h_smul _ _ _ (ih _ _)
+  induction w using consRecOn with
+  | h_empty => exact h_empty
+  | h_cons _ _ _ _ _ ih =>
+    rw [cons_eq_smul]
+    exact h_smul _ _ _ ih
 #align free_product.word.smul_induction Monoid.CoprodI.Word.smul_induction
 
 @[simp]
perf(GroupTheory/CoprodI): Get rid of one use of with in an instance (#6830)

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

Diff
@@ -234,8 +234,7 @@ theorem inv_def (x : CoprodI G) :
 #align free_product.inv_def Monoid.CoprodI.inv_def
 
 instance : Group (CoprodI G) :=
-  { inferInstanceAs (Inv (CoprodI G)), inferInstanceAs (Monoid (CoprodI G)) with
-    mul_left_inv := by
+  { mul_left_inv := by
       intro m
       rw [inv_def]
       induction m using CoprodI.induction_on with
feat: Binary coproducts of Monoids (#6828)
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
@@ -83,7 +83,7 @@ could be obtained by showing that `Monoid.CoprodI.Rel` is confluent.
 
 open Set
 
-variable {ι : Type _} (M : ι → Type _) [∀ i, Monoid (M i)]
+variable {ι : Type*} (M : ι → Type*) [∀ i, Monoid (M i)]
 
 /-- A relation on the free monoid on alphabet `Σ i, M i`,
 relating `⟨i, 1⟩` with `1` and `⟨i, x⟩ * ⟨i, y⟩` with `⟨i, x * y⟩`. -/
@@ -132,7 +132,7 @@ theorem of_apply {i} (m : M i) : of m = Con.mk' _ (FreeMonoid.of <| Sigma.mk i m
   rfl
 #align free_product.of_apply Monoid.CoprodI.of_apply
 
-variable {N : Type _} [Monoid N]
+variable {N : Type*} [Monoid N]
 
 /-- See note [partially-applied ext lemmas]. -/
 --Porting note: higher `ext` priority
@@ -220,7 +220,7 @@ theorem mrange_eq_iSup {N} [Monoid N] (f : ∀ i, M i →* N) :
 
 section Group
 
-variable (G : ι → Type _) [∀ i, Group (G i)]
+variable (G : ι → Type*) [∀ i, Group (G i)]
 
 instance : Inv (CoprodI G)
     where inv :=
@@ -674,7 +674,7 @@ theorem mulHead_prod {i j : ι} (w : NeWord M i j) (x : M i) (hnotone : x * w.he
 
 section Group
 
-variable {G : ι → Type _} [∀ i, Group (G i)]
+variable {G : ι → Type*} [∀ i, Group (G i)]
 
 /-- The inverse of a non-empty reduced word -/
 def inv : ∀ {i j} (_w : NeWord G i j), NeWord G j i
@@ -709,9 +709,9 @@ open Cardinal
 
 variable [hnontriv : Nontrivial ι]
 
-variable {G : Type _} [Group G]
+variable {G : Type*} [Group G]
 
-variable {H : ι → Type _} [∀ i, Group (H i)]
+variable {H : ι → Type*} [∀ i, Group (H i)]
 
 variable (f : ∀ i, H i →* G)
 
@@ -719,7 +719,7 @@ variable (f : ∀ i, H i →* G)
 variable (hcard : 3 ≤ #ι ∨ ∃ i, 3 ≤ #(H i))
 
 -- A group action on α, and the ping-pong sets
-variable {α : Type _} [MulAction G α]
+variable {α : Type*} [MulAction G α]
 
 variable (X : ι → Set α)
 
@@ -843,7 +843,7 @@ end PingPongLemma
 
 /-- The free product of free groups is itself a free group -/
 @[simps!]  --Porting note: added `!`
-instance {ι : Type _} (G : ι → Type _) [∀ i, Group (G i)] [hG : ∀ i, IsFreeGroup (G i)] :
+instance {ι : Type*} (G : ι → Type*) [∀ i, Group (G i)] [hG : ∀ i, IsFreeGroup (G i)] :
     IsFreeGroup (CoprodI G) where
   Generators := Σi, IsFreeGroup.Generators (G i)
   MulEquiv' :=
@@ -879,7 +879,7 @@ variable [Nontrivial ι]
 variable {G : Type u_1} [Group G] (a : ι → G)
 
 -- A group action on α, and the ping-pong sets
-variable {α : Type _} [MulAction G α]
+variable {α : Type*} [MulAction G α]
 
 variable (X Y : ι → Set α)
 
refactor: rename FreeProduct to Monoid.CoprodI (#6055)
Diff
@@ -13,52 +13,66 @@ import Mathlib.Data.Set.Pointwise.SMul
 #align_import group_theory.free_product from "leanprover-community/mathlib"@"9114ddffa023340c9ec86965e00cdd6fe26fcdf6"
 
 /-!
-# The free product of groups or monoids
+# The coproduct (a.k.a. the free product) of groups or monoids
 
-Given an `ι`-indexed family `M` of monoids, we define their free product (categorical coproduct)
-`FreeProduct M`. When `ι` and all `M i` have decidable equality, the free product bijects with the
-type `word M` of reduced words. This bijection is constructed by defining an action of
-`FreeProduct M` on `word M`.
+Given an `ι`-indexed family `M` of monoids,
+we define their coproduct (a.k.a. free product) `Monoid.CoprodI M`.
+As usual, we use the suffix `I` for an indexed (co)product,
+leaving `Coprod` for the coproduct of two monoids.
 
-When `M i` are all groups, `FreeProduct M` is also a group (and the coproduct in the category of
-groups).
+When `ι` and all `M i` have decidable equality,
+the free product bijects with the type `Monoid.CoprodI.Word M` of reduced words.
+This bijection is constructed
+by defining an action of `Monoid.CoprodI M` on `Monoid.CoprodI.Word M`.
+
+When `M i` are all groups, `Monoid.CoprodI M` is also a group
+(and the coproduct in the category of groups).
 
 ## Main definitions
 
-- `FreeProduct M`: the free product, defined as a quotient of a free monoid.
-- `FreeProduct.of {i} : M i →* FreeProduct M`.
-- `FreeProduct.lift : (Π {i}, M i →* N) ≃ (FreeProduct M →* N)`: the universal property.
-- `FreeProduct.Word M`: the type of reduced words.
-- `FreeProduct.Word.equiv M : FreeProduct M ≃ word M`.
-- `FreeProduct.NeWord M i j`: an inductive description of non-empty words with first letter from
-  `M i` and last letter from `M j`, together with an API (`singleton`, `append`, `head`, `tail`,
-  `to_word`, `Prod`, `inv`). Used in the proof of the Ping-Pong-lemma.
-- `FreeProduct.lift_injective_of_ping_pong`: The Ping-Pong-lemma, proving injectivity of the
-  `lift`. See the documentation of that theorem for more information.
+- `Monoid.CoprodI M`: the free product, defined as a quotient of a free monoid.
+- `Monoid.CoprodI.of {i} : M i →* Monoid.CoprodI M`.
+- `Monoid.CoprodI.lift : (∀ {i}, M i →* N) ≃ (Monoid.CoprodI M →* N)`: the universal property.
+- `Monoid.CoprodI.Word M`: the type of reduced words.
+- `Monoid.CoprodI.Word.equiv M : Monoid.CoprodI M ≃ word M`.
+- `Monoid.CoprodI.NeWord M i j`: an inductive description of non-empty words
+  with first letter from `M i` and last letter from `M j`,
+  together with an API (`singleton`, `append`, `head`, `tail`, `to_word`, `Prod`, `inv`).
+  Used in the proof of the Ping-Pong-lemma.
+- `Monoid.CoprodI.lift_injective_of_ping_pong`: The Ping-Pong-lemma,
+  proving injectivity of the `lift`. See the documentation of that theorem for more information.
 
 ## Remarks
 
-There are many answers to the question "what is the free product of a family `M` of monoids?", and
-they are all equivalent but not obviously equivalent. We provide two answers. The first, almost
-tautological answer is given by `FreeProduct M`, which is a quotient of the type of words in the
-alphabet `Σ i, M i`. It's straightforward to define and easy to prove its universal property. But
-this answer is not completely satisfactory, because it's difficult to tell when two elements
-`x y : FreeProduct M` are distinct since `FreeProduct M` is defined as a quotient.
-
-The second, maximally efficient answer is given by `word M`. An element of `word M` is a word in the
-alphabet `Σ i, M i`, where the letter `⟨i, 1⟩` doesn't occur and no adjacent letters share an index
-`i`. Since we only work with reduced words, there is no need for quotienting, and it is easy to tell
-when two elements are distinct. However it's not obvious that this is even a monoid!
-
-We prove that every element of `FreeProduct M` can be represented by a unique reduced word, i.e.
-`FreeProduct M` and `word M` are equivalent types. This means that `word M` can be given a monoid
-structure, and it lets us tell when two elements of `FreeProduct M` are distinct.
-
-There is also a completely tautological, maximally inefficient answer given by
-`algebra.category.Mon.colimits`. Whereas `FreeProduct M` at least ensures that (any instance of)
-associativity holds by reflexivity, in this answer associativity holds because of quotienting. Yet
-another answer, which is constructively more satisfying, could be obtained by showing that
-`FreeProduct.Rel` is confluent.
+There are many answers to the question "what is the coproduct of a family `M` of monoids?",
+and they are all equivalent but not obviously equivalent.
+We provide two answers.
+The first, almost tautological answer is given by `Monoid.CoprodI M`,
+which is a quotient of the type of words in the alphabet `Σ i, M i`.
+It's straightforward to define and easy to prove its universal property.
+But this answer is not completely satisfactory,
+because it's difficult to tell when two elements `x y : Monoid.CoprodI M` are distinct
+since `Monoid.CoprodI M` is defined as a quotient.
+
+The second, maximally efficient answer is given by `Monoid.CoprodI.Word M`.
+An element of `Monoid.CoprodI.Word M` is a word in the alphabet `Σ i, M i`,
+where the letter `⟨i, 1⟩` doesn't occur and no adjacent letters share an index `i`.
+Since we only work with reduced words, there is no need for quotienting,
+and it is easy to tell when two elements are distinct.
+However it's not obvious that this is even a monoid!
+
+We prove that every element of `Monoid.CoprodI M` can be represented by a unique reduced word,
+i.e. `Monoid.CoprodI M` and `Monoid.CoprodI.Word M` are equivalent types.
+This means that `Monoid.CoprodI.Word M` can be given a monoid structure,
+and it lets us tell when two elements of `Monoid.CoprodI M` are distinct.
+
+There is also a completely tautological, maximally inefficient answer
+given by `MonCat.Colimits.ColimitType`.
+Whereas `Monoid.CoprodI M` at least ensures that
+(any instance of) associativity holds by reflexivity,
+in this answer associativity holds because of quotienting.
+Yet another answer, which is constructively more satisfying,
+could be obtained by showing that `Monoid.CoprodI.Rel` is confluent.
 
 ## References
 
@@ -71,28 +85,26 @@ open Set
 
 variable {ι : Type _} (M : ι → Type _) [∀ i, Monoid (M i)]
 
-/-- A relation on the free monoid on alphabet `Σ i, M i`, relating `⟨i, 1⟩` with `1` and
-`⟨i, x⟩ * ⟨i, y⟩` with `⟨i, x * y⟩`. -/
-inductive FreeProduct.Rel : FreeMonoid (Σi, M i) → FreeMonoid (Σi, M i) → Prop
-  | of_one (i : ι) : FreeProduct.Rel (FreeMonoid.of ⟨i, 1⟩) 1
-  |
-  of_mul {i : ι} (x y : M i) :
-    FreeProduct.Rel (FreeMonoid.of ⟨i, x⟩ * FreeMonoid.of ⟨i, y⟩) (FreeMonoid.of ⟨i, x * y⟩)
-#align free_product.rel FreeProduct.Rel
+/-- A relation on the free monoid on alphabet `Σ i, M i`,
+relating `⟨i, 1⟩` with `1` and `⟨i, x⟩ * ⟨i, y⟩` with `⟨i, x * y⟩`. -/
+inductive Monoid.CoprodI.Rel : FreeMonoid (Σi, M i) → FreeMonoid (Σi, M i) → Prop
+  | of_one (i : ι) : Monoid.CoprodI.Rel (FreeMonoid.of ⟨i, 1⟩) 1
+  | of_mul {i : ι} (x y : M i) :
+    Monoid.CoprodI.Rel (FreeMonoid.of ⟨i, x⟩ * FreeMonoid.of ⟨i, y⟩) (FreeMonoid.of ⟨i, x * y⟩)
+#align free_product.rel Monoid.CoprodI.Rel
 
 /-- The free product (categorical coproduct) of an indexed family of monoids. -/
-def FreeProduct : Type _ :=
-  (conGen (FreeProduct.Rel M)).Quotient
-#align free_product FreeProduct
+def Monoid.CoprodI : Type _ := (conGen (Monoid.CoprodI.Rel M)).Quotient
+#align free_product Monoid.CoprodI
 
 --Porting note: could not de derived
-instance : Monoid (FreeProduct M) :=
-  by delta FreeProduct; infer_instance
+instance : Monoid (Monoid.CoprodI M) :=
+  by delta Monoid.CoprodI; infer_instance
 
-instance : Inhabited (FreeProduct M) :=
+instance : Inhabited (Monoid.CoprodI M) :=
   ⟨1⟩
 
-namespace FreeProduct
+namespace Monoid.CoprodI
 
 /-- The type of reduced words. A reduced word cannot contain a letter `1`, and no two adjacent
 letters can come from the same summand. -/
@@ -105,50 +117,48 @@ structure Word where
   ne_one : ∀ l ∈ toList, Sigma.snd l ≠ 1
   /-- Adjacent letters are not from the same summand. -/
   chain_ne : toList.Chain' fun l l' => Sigma.fst l ≠ Sigma.fst l'
-#align free_product.word FreeProduct.Word
+#align free_product.word Monoid.CoprodI.Word
 
 variable {M}
 
 /-- The inclusion of a summand into the free product. -/
-def of {i : ι} : M i →* FreeProduct M
-    where
+def of {i : ι} : M i →* CoprodI M where
   toFun x := Con.mk' _ (FreeMonoid.of <| Sigma.mk i x)
-  map_one' := (Con.eq _).mpr (ConGen.Rel.of _ _ (FreeProduct.Rel.of_one i))
-  map_mul' x y := Eq.symm <| (Con.eq _).mpr (ConGen.Rel.of _ _ (FreeProduct.Rel.of_mul x y))
-#align free_product.of FreeProduct.of
+  map_one' := (Con.eq _).mpr (ConGen.Rel.of _ _ (CoprodI.Rel.of_one i))
+  map_mul' x y := Eq.symm <| (Con.eq _).mpr (ConGen.Rel.of _ _ (CoprodI.Rel.of_mul x y))
+#align free_product.of Monoid.CoprodI.of
 
 theorem of_apply {i} (m : M i) : of m = Con.mk' _ (FreeMonoid.of <| Sigma.mk i m) :=
   rfl
-#align free_product.of_apply FreeProduct.of_apply
+#align free_product.of_apply Monoid.CoprodI.of_apply
 
 variable {N : Type _} [Monoid N]
 
 /-- See note [partially-applied ext lemmas]. -/
 --Porting note: higher `ext` priority
 @[ext 1100]
-theorem ext_hom (f g : FreeProduct M →* N) (h : ∀ i, f.comp (of : M i →* _) = g.comp of) : f = g :=
+theorem ext_hom (f g : CoprodI M →* N) (h : ∀ i, f.comp (of : M i →* _) = g.comp of) : f = g :=
   (MonoidHom.cancel_right Con.mk'_surjective).mp <|
     FreeMonoid.hom_eq fun ⟨i, x⟩ => by
       rw [MonoidHom.comp_apply, MonoidHom.comp_apply, ← of_apply, ← MonoidHom.comp_apply, ←
         MonoidHom.comp_apply, h]
-#align free_product.ext_hom FreeProduct.ext_hom
+#align free_product.ext_hom Monoid.CoprodI.ext_hom
 
 /-- A map out of the free product corresponds to a family of maps out of the summands. This is the
 universal property of the free product, characterizing it as a categorical coproduct. -/
 @[simps symm_apply]
-def lift : (∀ i, M i →* N) ≃ (FreeProduct M →* N) where
+def lift : (∀ i, M i →* N) ≃ (CoprodI M →* N) where
   toFun fi :=
     Con.lift _ (FreeMonoid.lift fun p : Σi, M i => fi p.fst p.snd) <|
-      Con.conGen_le
-        (by
-          simp_rw [Con.rel_eq_coe, Con.ker_rel]
-          rintro _ _ (i | ⟨x, y⟩)
-          · change FreeMonoid.lift _ (FreeMonoid.of _) = FreeMonoid.lift _ 1
-            simp only [MonoidHom.map_one, FreeMonoid.lift_eval_of]
-          · change
-              FreeMonoid.lift _ (FreeMonoid.of _ * FreeMonoid.of _) =
-                FreeMonoid.lift _ (FreeMonoid.of _)
-            simp only [MonoidHom.map_mul, FreeMonoid.lift_eval_of])
+      Con.conGen_le <| by
+        simp_rw [Con.rel_eq_coe, Con.ker_rel]
+        rintro _ _ (i | ⟨x, y⟩)
+        · change FreeMonoid.lift _ (FreeMonoid.of _) = FreeMonoid.lift _ 1
+          simp only [MonoidHom.map_one, FreeMonoid.lift_eval_of]
+        · change
+            FreeMonoid.lift _ (FreeMonoid.of _ * FreeMonoid.of _) =
+              FreeMonoid.lift _ (FreeMonoid.of _)
+          simp only [MonoidHom.map_mul, FreeMonoid.lift_eval_of]
   invFun f i := f.comp of
   left_inv := by
     intro fi
@@ -158,17 +168,17 @@ def lift : (∀ i, M i →* N) ≃ (FreeProduct M →* N) where
     intro f
     ext i x
     rfl
-#align free_product.lift FreeProduct.lift
+#align free_product.lift Monoid.CoprodI.lift
 
 @[simp]
 theorem lift_of {N} [Monoid N] (fi : ∀ i, M i →* N) {i} (m : M i) : lift fi (of m) = fi i m := by
   conv_rhs => rw [← lift.symm_apply_apply fi, lift_symm_apply, MonoidHom.comp_apply]
-#align free_product.lift_of FreeProduct.lift_of
+#align free_product.lift_of Monoid.CoprodI.lift_of
 
 @[elab_as_elim]
-theorem induction_on {C : FreeProduct M → Prop} (m : FreeProduct M) (h_one : C 1)
+theorem induction_on {C : CoprodI M → Prop} (m : CoprodI M) (h_one : C 1)
     (h_of : ∀ (i) (m : M i), C (of m)) (h_mul : ∀ x y, C x → C y → C (x * y)) : C m := by
-  let S : Submonoid (FreeProduct M) :=
+  let S : Submonoid (CoprodI M) :=
     { carrier := setOf C
       mul_mem' := h_mul _ _
       one_mem' := h_one }
@@ -178,27 +188,27 @@ theorem induction_on {C : FreeProduct M → Prop} (m : FreeProduct M) (h_one : C
   congr
   ext i
   rfl
-#align free_product.induction_on FreeProduct.induction_on
+#align free_product.induction_on Monoid.CoprodI.induction_on
 
 theorem of_leftInverse [DecidableEq ι] (i : ι) :
     Function.LeftInverse (lift <| Pi.mulSingle i (MonoidHom.id (M i))) of := fun x => by
   simp only [lift_of, Pi.mulSingle_eq_same, MonoidHom.id_apply]
-#align free_product.of_left_inverse FreeProduct.of_leftInverse
+#align free_product.of_left_inverse Monoid.CoprodI.of_leftInverse
 
 theorem of_injective (i : ι) : Function.Injective (of : M i →* _) := by
   classical exact (of_leftInverse i).injective
-#align free_product.of_injective FreeProduct.of_injective
+#align free_product.of_injective Monoid.CoprodI.of_injective
 
 theorem lift_mrange_le {N} [Monoid N] (f : ∀ i, M i →* N) {s : Submonoid N}
     (h : ∀ i, MonoidHom.mrange (f i) ≤ s) : MonoidHom.mrange (lift f) ≤ s := by
   rintro _ ⟨x, rfl⟩
-  induction' x using FreeProduct.induction_on with i x x y hx hy
+  induction' x using CoprodI.induction_on with i x x y hx hy
   · exact s.one_mem
   · simp only [lift_of, SetLike.mem_coe]
     exact h i (Set.mem_range_self x)
   · simp only [map_mul, SetLike.mem_coe]
     exact s.mul_mem hx hy
-#align free_product.lift_mrange_le FreeProduct.lift_mrange_le
+#align free_product.lift_mrange_le Monoid.CoprodI.lift_mrange_le
 
 theorem mrange_eq_iSup {N} [Monoid N] (f : ∀ i, M i →* N) :
     MonoidHom.mrange (lift f) = ⨆ i, MonoidHom.mrange (f i) := by
@@ -206,29 +216,29 @@ theorem mrange_eq_iSup {N} [Monoid N] (f : ∀ i, M i →* N) :
   apply iSup_le _
   rintro i _ ⟨x, rfl⟩
   exact ⟨of x, by simp only [lift_of]⟩
-#align free_product.mrange_eq_supr FreeProduct.mrange_eq_iSup
+#align free_product.mrange_eq_supr Monoid.CoprodI.mrange_eq_iSup
 
 section Group
 
 variable (G : ι → Type _) [∀ i, Group (G i)]
 
-instance : Inv (FreeProduct G)
+instance : Inv (CoprodI G)
     where inv :=
     MulOpposite.unop ∘ lift fun i => (of : G i →* _).op.comp (MulEquiv.inv' (G i)).toMonoidHom
 
-theorem inv_def (x : FreeProduct G) :
+theorem inv_def (x : CoprodI G) :
     x⁻¹ =
       MulOpposite.unop
         (lift (fun i => (of : G i →* _).op.comp (MulEquiv.inv' (G i)).toMonoidHom) x) :=
   rfl
-#align free_product.inv_def FreeProduct.inv_def
+#align free_product.inv_def Monoid.CoprodI.inv_def
 
-instance : Group (FreeProduct G) :=
-  { inferInstanceAs (Inv (FreeProduct G)), inferInstanceAs (Monoid (FreeProduct G)) with
+instance : Group (CoprodI G) :=
+  { inferInstanceAs (Inv (CoprodI G)), inferInstanceAs (Monoid (CoprodI G)) with
     mul_left_inv := by
       intro m
       rw [inv_def]
-      induction m using FreeProduct.induction_on with
+      induction m using CoprodI.induction_on with
       | h_one => rw [MonoidHom.map_one, MulOpposite.unop_one, one_mul]
       | h_of m ih =>
         change of _⁻¹ * of _ = 1
@@ -240,20 +250,20 @@ instance : Group (FreeProduct G) :=
 theorem lift_range_le {N} [Group N] (f : ∀ i, G i →* N) {s : Subgroup N}
     (h : ∀ i, (f i).range ≤ s) : (lift f).range ≤ s := by
   rintro _ ⟨x, rfl⟩
-  induction' x using FreeProduct.induction_on with i x x y hx hy
+  induction' x using CoprodI.induction_on with i x x y hx hy
   · exact s.one_mem
   · simp only [lift_of, SetLike.mem_coe]
     exact h i (Set.mem_range_self x)
   · simp only [map_mul, SetLike.mem_coe]
     exact s.mul_mem hx hy
-#align free_product.lift_range_le FreeProduct.lift_range_le
+#align free_product.lift_range_le Monoid.CoprodI.lift_range_le
 
 theorem range_eq_iSup {N} [Group N] (f : ∀ i, G i →* N) : (lift f).range = ⨆ i, (f i).range := by
   apply le_antisymm (lift_range_le _ f fun i => le_iSup (fun i => MonoidHom.range (f i)) i)
   apply iSup_le _
   rintro i _ ⟨x, rfl⟩
   exact ⟨of x, by simp only [lift_of]⟩
-#align free_product.range_eq_supr FreeProduct.range_eq_iSup
+#align free_product.range_eq_supr Monoid.CoprodI.range_eq_iSup
 
 end Group
 
@@ -264,31 +274,31 @@ def empty : Word M where
   toList := []
   ne_one := by simp
   chain_ne := List.chain'_nil
-#align free_product.word.empty FreeProduct.Word.empty
+#align free_product.word.empty Monoid.CoprodI.Word.empty
 
 instance : Inhabited (Word M) :=
   ⟨empty⟩
 
 /-- A reduced word determines an element of the free product, given by multiplication. -/
-def prod (w : Word M) : FreeProduct M :=
+def prod (w : Word M) : CoprodI M :=
   List.prod (w.toList.map fun l => of l.snd)
-#align free_product.word.prod FreeProduct.Word.prod
+#align free_product.word.prod Monoid.CoprodI.Word.prod
 
 @[simp]
 theorem prod_empty : prod (empty : Word M) = 1 :=
   rfl
-#align free_product.word.prod_empty FreeProduct.Word.prod_empty
+#align free_product.word.prod_empty Monoid.CoprodI.Word.prod_empty
 
 /-- `fstIdx w` is `some i` if the first letter of `w` is `⟨i, m⟩` with `m : M i`. If `w` is empty
 then it's `none`. -/
 def fstIdx (w : Word M) : Option ι :=
   w.toList.head?.map Sigma.fst
-#align free_product.word.fst_idx FreeProduct.Word.fstIdx
+#align free_product.word.fst_idx Monoid.CoprodI.Word.fstIdx
 
 theorem fstIdx_ne_iff {w : Word M} {i} :
     fstIdx w ≠ some i ↔ ∀ l ∈ w.toList.head?, i ≠ Sigma.fst l :=
   not_iff_not.mp <| by simp [fstIdx]
-#align free_product.word.fst_idx_ne_iff FreeProduct.Word.fstIdx_ne_iff
+#align free_product.word.fst_idx_ne_iff Monoid.CoprodI.Word.fstIdx_ne_iff
 
 variable (M)
 
@@ -304,7 +314,7 @@ structure Pair (i : ι) where
   tail : Word M
   /-- The index first letter of tail of a `Pair M i` is not equal to `i` -/
   fstIdx_ne : fstIdx tail ≠ some i
-#align free_product.word.pair FreeProduct.Word.Pair
+#align free_product.word.pair Monoid.CoprodI.Word.Pair
 
 instance (i : ι) : Inhabited (Pair M i) :=
   ⟨⟨1, empty, by tauto⟩⟩
@@ -326,7 +336,7 @@ def rcons {i} (p : Pair M i) : Word M :=
         exact h
         exact p.tail.ne_one l hl
       chain_ne := p.tail.chain_ne.cons' (fstIdx_ne_iff.mp p.fstIdx_ne) }
-#align free_product.word.rcons FreeProduct.Word.rcons
+#align free_product.word.rcons Monoid.CoprodI.Word.rcons
 
 /-- Given a word of the form `⟨l :: ls, h1, h2⟩`, we can form a word of the form `⟨ls, _, _⟩`,
 dropping the first letter. -/
@@ -339,13 +349,13 @@ theorem cons_eq_rcons {i} {m : M i} {ls h1 h2} :
   rw [rcons, dif_neg]
   rfl
   exact h1 ⟨i, m⟩ (ls.mem_cons_self _)
-#align free_product.word.cons_eq_rcons FreeProduct.Word.cons_eq_rcons
+#align free_product.word.cons_eq_rcons Monoid.CoprodI.Word.cons_eq_rcons
 
 @[simp]
 theorem prod_rcons {i} (p : Pair M i) : prod (rcons p) = of p.head * prod p.tail :=
   if hm : p.head = 1 then by rw [rcons, dif_pos hm, hm, MonoidHom.map_one, one_mul]
   else by rw [rcons, dif_neg hm, prod, List.map_cons, List.prod_cons, prod]
-#align free_product.word.prod_rcons FreeProduct.Word.prod_rcons
+#align free_product.word.prod_rcons Monoid.CoprodI.Word.prod_rcons
 
 theorem rcons_inj {i} : Function.Injective (rcons : Pair M i → Word M) := by
   rintro ⟨m, w, h⟩ ⟨m', w', h'⟩ he
@@ -366,7 +376,7 @@ theorem rcons_inj {i} : Function.Injective (rcons : Pair M i → Word M) := by
     rcases this with ⟨rfl, h⟩
     congr
     exact Word.ext _ _ h
-#align free_product.word.rcons_inj FreeProduct.Word.rcons_inj
+#align free_product.word.rcons_inj Monoid.CoprodI.Word.rcons_inj
 
 variable [DecidableEq ι]
 
@@ -393,16 +403,16 @@ def equivPair (i) : Word M ≃ Pair M i where
   invFun := rcons
   left_inv w := (equivPairAux i w).property
   right_inv _ := rcons_inj (equivPairAux i _).property
-#align free_product.word.equiv_pair FreeProduct.Word.equivPair
+#align free_product.word.equiv_pair Monoid.CoprodI.Word.equivPair
 
 theorem equivPair_symm (i) (p : Pair M i) : (equivPair i).symm p = rcons p :=
   rfl
-#align free_product.word.equiv_pair_symm FreeProduct.Word.equivPair_symm
+#align free_product.word.equiv_pair_symm Monoid.CoprodI.Word.equivPair_symm
 
 theorem equivPair_eq_of_fstIdx_ne {i} {w : Word M} (h : fstIdx w ≠ some i) :
     equivPair i w = ⟨1, w, h⟩ :=
   (equivPair i).apply_eq_iff_eq_symm_apply.mpr <| Eq.symm (dif_pos rfl)
-#align free_product.word.equiv_pair_eq_of_fst_idx_ne FreeProduct.Word.equivPair_eq_of_fstIdx_ne
+#align free_product.word.equiv_pair_eq_of_fst_idx_ne Monoid.CoprodI.Word.equivPair_eq_of_fstIdx_ne
 
 instance summandAction (i) : MulAction (M i) (Word M) where
   smul m w := rcons { equivPair i w with head := m * (equivPair i w).head }
@@ -412,15 +422,15 @@ instance summandAction (i) : MulAction (M i) (Word M) where
   mul_smul m m' w := by
     dsimp [instHSMul]
     simp [mul_assoc, ← equivPair_symm, Equiv.apply_symm_apply]
-#align free_product.word.summand_action FreeProduct.Word.summandAction
+#align free_product.word.summand_action Monoid.CoprodI.Word.summandAction
 
-instance : MulAction (FreeProduct M) (Word M) :=
+instance : MulAction (CoprodI M) (Word M) :=
   MulAction.ofEndHom (lift fun _ => MulAction.toEndHom)
 
 theorem of_smul_def (i) (w : Word M) (m : M i) :
     of m • w = rcons { equivPair i w with head := m * (equivPair i w).head } :=
   rfl
-#align free_product.word.of_smul_def FreeProduct.Word.of_smul_def
+#align free_product.word.of_smul_def Monoid.CoprodI.Word.of_smul_def
 
 theorem cons_eq_smul {i} {m : M i} {ls h1 h2} :
     Word.mk (⟨i, m⟩::ls) h1 h2 = of m • mkAux ls h1 h2 := by
@@ -428,7 +438,7 @@ theorem cons_eq_smul {i} {m : M i} {ls h1 h2} :
   · simp
   · rw [fstIdx_ne_iff]
     exact (List.chain'_cons'.1 h2).1
-#align free_product.word.cons_eq_smul FreeProduct.Word.cons_eq_smul
+#align free_product.word.cons_eq_smul Monoid.CoprodI.Word.cons_eq_smul
 
 theorem smul_induction {C : Word M → Prop} (h_empty : C empty)
     (h_smul : ∀ (i) (m : M i) (w), C w → C (of m • w)) (w : Word M) : C w := by
@@ -438,11 +448,11 @@ theorem smul_induction {C : Word M → Prop} (h_empty : C empty)
   cases' l with i m
   rw [cons_eq_smul]
   exact h_smul _ _ _ (ih _ _)
-#align free_product.word.smul_induction FreeProduct.Word.smul_induction
+#align free_product.word.smul_induction Monoid.CoprodI.Word.smul_induction
 
 @[simp]
 theorem prod_smul (m) : ∀ w : Word M, prod (m • w) = m * prod w := by
-  induction m using FreeProduct.induction_on with
+  induction m using CoprodI.induction_on with
   | h_one =>
     intro
     rw [one_smul, one_mul]
@@ -453,10 +463,10 @@ theorem prod_smul (m) : ∀ w : Word M, prod (m • w) = m * prod w := by
   | h_mul x y hx hy =>
     intro w
     rw [mul_smul, hx, hy, mul_assoc]
-#align free_product.word.prod_smul FreeProduct.Word.prod_smul
+#align free_product.word.prod_smul Monoid.CoprodI.Word.prod_smul
 
 /-- Each element of the free product corresponds to a unique reduced word. -/
-def equiv : FreeProduct M ≃ Word M where
+def equiv : CoprodI M ≃ Word M where
   toFun m := m • empty
   invFun w := prod w
   left_inv m := by dsimp only; rw [prod_smul, prod_empty, mul_one]
@@ -467,12 +477,12 @@ def equiv : FreeProduct M ≃ Word M where
     · dsimp only
       intro i m w ih
       rw [prod_smul, mul_smul, ih]
-#align free_product.word.equiv FreeProduct.Word.equiv
+#align free_product.word.equiv Monoid.CoprodI.Word.equiv
 
 instance : DecidableEq (Word M) :=
   Function.Injective.decidableEq Word.ext
 
-instance : DecidableEq (FreeProduct M) :=
+instance : DecidableEq (CoprodI M) :=
   Equiv.decidableEq Word.equiv
 
 end Word
@@ -486,7 +496,7 @@ concatenation, and thus provides a useful induction principle. -/
 inductive NeWord : ι → ι → Type _
   | singleton : ∀ {i : ι} (x : M i), x ≠ 1 → NeWord i i
   | append : ∀ {i j k l} (_w₁ : NeWord i j) (_hne : j ≠ k) (_w₂ : NeWord k l), NeWord i l
-#align free_product.neword FreeProduct.NeWord
+#align free_product.neword Monoid.CoprodI.NeWord
 
 variable {M}
 
@@ -499,28 +509,28 @@ open Word
 def toList : ∀ {i j} (_w : NeWord M i j), List (Σi, M i)
   | i, _, singleton x _ => [⟨i, x⟩]
   | _, _, append w₁ _ w₂ => w₁.toList ++ w₂.toList
-#align free_product.neword.to_list FreeProduct.NeWord.toList
+#align free_product.neword.to_list Monoid.CoprodI.NeWord.toList
 
 theorem toList_ne_nil {i j} (w : NeWord M i j) : w.toList ≠ List.nil := by
   induction w
   · rintro ⟨rfl⟩
   · apply List.append_ne_nil_of_ne_nil_left
     assumption
-#align free_product.neword.to_list_ne_nil FreeProduct.NeWord.toList_ne_nil
+#align free_product.neword.to_list_ne_nil Monoid.CoprodI.NeWord.toList_ne_nil
 
 /-- The first letter of a `NeWord` -/
 @[simp]
 def head : ∀ {i j} (_w : NeWord M i j), M i
   | _, _, singleton x _ => x
   | _, _, append w₁ _ _ => w₁.head
-#align free_product.neword.head FreeProduct.NeWord.head
+#align free_product.neword.head Monoid.CoprodI.NeWord.head
 
 /-- The last letter of a `NeWord` -/
 @[simp]
 def last : ∀ {i j} (_w : NeWord M i j), M j
   | _, _, singleton x _hne1 => x
   | _, _, append _w₁ _hne w₂ => w₂.last
-#align free_product.neword.last FreeProduct.NeWord.last
+#align free_product.neword.last Monoid.CoprodI.NeWord.last
 
 @[simp]
 theorem toList_head? {i j} (w : NeWord M i j) : w.toList.head? = Option.some ⟨i, w.head⟩ := by
@@ -529,7 +539,7 @@ theorem toList_head? {i j} (w : NeWord M i j) : w.toList.head? = Option.some ⟨
   · rw [Option.mem_def]
     rfl
   · exact List.head?_append (by assumption)
-#align free_product.neword.to_list_head' FreeProduct.NeWord.toList_head?
+#align free_product.neword.to_list_head' Monoid.CoprodI.NeWord.toList_head?
 
 @[simp]
 theorem toList_getLast? {i j} (w : NeWord M i j) : w.toList.getLast? = Option.some ⟨j, w.last⟩ := by
@@ -538,7 +548,7 @@ theorem toList_getLast? {i j} (w : NeWord M i j) : w.toList.getLast? = Option.so
   · rw [Option.mem_def]
     rfl
   · exact List.getLast?_append (by assumption)
-#align free_product.neword.to_list_last' FreeProduct.NeWord.toList_getLast?
+#align free_product.neword.to_list_last' Monoid.CoprodI.NeWord.toList_getLast?
 
 /-- The `Word M` represented by a `NeWord M i j` -/
 def toWord {i j} (w : NeWord M i j) : Word M
@@ -560,7 +570,7 @@ def toWord {i j} (w : NeWord M i j) : Word M
       subst hx
       subst hy
       assumption
-#align free_product.neword.to_word FreeProduct.NeWord.toWord
+#align free_product.neword.to_word Monoid.CoprodI.NeWord.toWord
 
 /-- Every nonempty `Word M` can be constructed as a `NeWord M i j` -/
 theorem of_word (w : Word M) (h : w ≠ empty) : ∃ (i j : _) (w' : NeWord M i j), w'.toWord = w := by
@@ -582,51 +592,51 @@ theorem of_word (w : Word M) (h : w ≠ empty) : ∃ (i j : _) (w' : NeWord M i
       obtain rfl : y = ⟨i, w'.head⟩ := by simpa [hw'] using w'.toList_head?
       refine' ⟨x.1, j, append (singleton x.2 hnot1.1) hchain.1 w', _⟩
       · simpa [toWord] using hw'
-#align free_product.neword.of_word FreeProduct.NeWord.of_word
+#align free_product.neword.of_word Monoid.CoprodI.NeWord.of_word
 
 /-- A non-empty reduced word determines an element of the free product, given by multiplication. -/
 def prod {i j} (w : NeWord M i j) :=
   w.toWord.prod
-#align free_product.neword.prod FreeProduct.NeWord.prod
+#align free_product.neword.prod Monoid.CoprodI.NeWord.prod
 
 @[simp]
 theorem singleton_head {i} (x : M i) (hne_one : x ≠ 1) : (singleton x hne_one).head = x :=
   rfl
-#align free_product.neword.singleton_head FreeProduct.NeWord.singleton_head
+#align free_product.neword.singleton_head Monoid.CoprodI.NeWord.singleton_head
 
 @[simp]
 theorem singleton_last {i} (x : M i) (hne_one : x ≠ 1) : (singleton x hne_one).last = x :=
   rfl
-#align free_product.neword.singleton_last FreeProduct.NeWord.singleton_last
+#align free_product.neword.singleton_last Monoid.CoprodI.NeWord.singleton_last
 
 @[simp]
 theorem prod_singleton {i} (x : M i) (hne_one : x ≠ 1) : (singleton x hne_one).prod = of x := by
   simp [toWord, prod, Word.prod]
-#align free_product.neword.prod_singleton FreeProduct.NeWord.prod_singleton
+#align free_product.neword.prod_singleton Monoid.CoprodI.NeWord.prod_singleton
 
 @[simp]
 theorem append_head {i j k l} {w₁ : NeWord M i j} {hne : j ≠ k} {w₂ : NeWord M k l} :
     (append w₁ hne w₂).head = w₁.head :=
   rfl
-#align free_product.neword.append_head FreeProduct.NeWord.append_head
+#align free_product.neword.append_head Monoid.CoprodI.NeWord.append_head
 
 @[simp]
 theorem append_last {i j k l} {w₁ : NeWord M i j} {hne : j ≠ k} {w₂ : NeWord M k l} :
     (append w₁ hne w₂).last = w₂.last :=
   rfl
-#align free_product.neword.append_last FreeProduct.NeWord.append_last
+#align free_product.neword.append_last Monoid.CoprodI.NeWord.append_last
 
 @[simp]
 theorem append_prod {i j k l} {w₁ : NeWord M i j} {hne : j ≠ k} {w₂ : NeWord M k l} :
     (append w₁ hne w₂).prod = w₁.prod * w₂.prod := by simp [toWord, prod, Word.prod]
-#align free_product.neword.append_prod FreeProduct.NeWord.append_prod
+#align free_product.neword.append_prod Monoid.CoprodI.NeWord.append_prod
 
 /-- One can replace the first letter in a non-empty reduced word by an element of the same
 group -/
 def replaceHead : ∀ {i j : ι} (x : M i) (_hnotone : x ≠ 1) (_w : NeWord M i j), NeWord M i j
   | _, _, x, h, singleton _ _ => singleton x h
   | _, _, x, h, append w₁ hne w₂ => append (replaceHead x h w₁) hne w₂
-#align free_product.neword.replace_head FreeProduct.NeWord.replaceHead
+#align free_product.neword.replace_head Monoid.CoprodI.NeWord.replaceHead
 
 @[simp]
 theorem replaceHead_head {i j : ι} (x : M i) (hnotone : x ≠ 1) (w : NeWord M i j) :
@@ -634,13 +644,13 @@ theorem replaceHead_head {i j : ι} (x : M i) (hnotone : x ≠ 1) (w : NeWord M
   induction w
   rfl
   simp [*]
-#align free_product.neword.replace_head_head FreeProduct.NeWord.replaceHead_head
+#align free_product.neword.replace_head_head Monoid.CoprodI.NeWord.replaceHead_head
 
 /-- One can multiply an element from the left to a non-empty reduced word if it does not cancel
 with the first element in the word. -/
 def mulHead {i j : ι} (w : NeWord M i j) (x : M i) (hnotone : x * w.head ≠ 1) : NeWord M i j :=
   replaceHead (x * w.head) hnotone w
-#align free_product.neword.mul_head FreeProduct.NeWord.mulHead
+#align free_product.neword.mul_head Monoid.CoprodI.NeWord.mulHead
 
 @[simp]
 theorem mulHead_head {i j : ι} (w : NeWord M i j) (x : M i) (hnotone : x * w.head ≠ 1) :
@@ -648,7 +658,7 @@ theorem mulHead_head {i j : ι} (w : NeWord M i j) (x : M i) (hnotone : x * w.he
   induction w
   rfl
   simp [*]
-#align free_product.neword.mul_head_head FreeProduct.NeWord.mulHead_head
+#align free_product.neword.mul_head_head Monoid.CoprodI.NeWord.mulHead_head
 
 @[simp]
 theorem mulHead_prod {i j : ι} (w : NeWord M i j) (x : M i) (hnotone : x * w.head ≠ 1) :
@@ -660,7 +670,7 @@ theorem mulHead_prod {i j : ι} (w : NeWord M i j) (x : M i) (hnotone : x * w.he
     clear w_ih_w₂
     simp [replaceHead, ← mul_assoc] at *
     congr 1
-#align free_product.neword.mul_head_prod FreeProduct.NeWord.mulHead_prod
+#align free_product.neword.mul_head_prod Monoid.CoprodI.NeWord.mulHead_prod
 
 section Group
 
@@ -670,22 +680,22 @@ variable {G : ι → Type _} [∀ i, Group (G i)]
 def inv : ∀ {i j} (_w : NeWord G i j), NeWord G j i
   | _, _, singleton x h => singleton x⁻¹ (mt inv_eq_one.mp h)
   | _, _, append w₁ h w₂ => append w₂.inv h.symm w₁.inv
-#align free_product.neword.inv FreeProduct.NeWord.inv
+#align free_product.neword.inv Monoid.CoprodI.NeWord.inv
 
 @[simp]
 theorem inv_prod {i j} (w : NeWord G i j) : w.inv.prod = w.prod⁻¹ := by
   induction w <;> simp [inv, *]
-#align free_product.neword.inv_prod FreeProduct.NeWord.inv_prod
+#align free_product.neword.inv_prod Monoid.CoprodI.NeWord.inv_prod
 
 @[simp]
 theorem inv_head {i j} (w : NeWord G i j) : w.inv.head = w.last⁻¹ := by
   induction w <;> simp [inv, *]
-#align free_product.neword.inv_head FreeProduct.NeWord.inv_head
+#align free_product.neword.inv_head Monoid.CoprodI.NeWord.inv_head
 
 @[simp]
 theorem inv_last {i j} (w : NeWord G i j) : w.inv.last = w.head⁻¹ := by
   induction w <;> simp [inv, *]
-#align free_product.neword.inv_last FreeProduct.NeWord.inv_last
+#align free_product.neword.inv_last Monoid.CoprodI.NeWord.inv_last
 
 end Group
 
@@ -730,7 +740,7 @@ theorem lift_word_ping_pong {i j k} (w : NeWord H i j) (hk : j ≠ k) :
         simp [MulAction.mul_smul]
       _ ⊆ lift f w₁.prod • X _ := (set_smul_subset_set_smul_iff.mpr (hIw₂ hk))
       _ ⊆ X i := hIw₁ hne
-#align free_product.lift_word_ping_pong FreeProduct.lift_word_ping_pong
+#align free_product.lift_word_ping_pong Monoid.CoprodI.lift_word_ping_pong
 
 --include X hXnonempty hXdisj Porting note: commented out
 
@@ -740,14 +750,14 @@ theorem lift_word_prod_nontrivial_of_other_i {i j k} (w : NeWord H i j) (hhead :
   have : X k ⊆ X i := by simpa [heq1] using lift_word_ping_pong f X hpp w hlast.symm
   obtain ⟨x, hx⟩ := hXnonempty k
   exact (hXdisj hhead).le_bot ⟨hx, this hx⟩
-#align free_product.lift_word_prod_nontrivial_of_other_i FreeProduct.lift_word_prod_nontrivial_of_other_i
+#align free_product.lift_word_prod_nontrivial_of_other_i Monoid.CoprodI.lift_word_prod_nontrivial_of_other_i
 
 --include hnontriv Porting note: commented out
 
 theorem lift_word_prod_nontrivial_of_head_eq_last {i} (w : NeWord H i i) : lift f w.prod ≠ 1 := by
   obtain ⟨k, hk⟩ := exists_ne i
   exact lift_word_prod_nontrivial_of_other_i f X hXnonempty hXdisj hpp w hk hk
-#align free_product.lift_word_prod_nontrivial_of_head_eq_last FreeProduct.lift_word_prod_nontrivial_of_head_eq_last
+#align free_product.lift_word_prod_nontrivial_of_head_eq_last Monoid.CoprodI.lift_word_prod_nontrivial_of_head_eq_last
 
 theorem lift_word_prod_nontrivial_of_head_card {i j} (w : NeWord H i j) (hcard : 3 ≤ #(H i))
     (hheadtail : i ≠ j) : lift f w.prod ≠ 1 := by
@@ -763,7 +773,7 @@ theorem lift_word_prod_nontrivial_of_head_card {i j} (w : NeWord H i j) (hcard :
   intro heq1
   apply hw'
   simp [heq1]
-#align free_product.lift_word_prod_nontrivial_of_head_card FreeProduct.lift_word_prod_nontrivial_of_head_card
+#align free_product.lift_word_prod_nontrivial_of_head_card Monoid.CoprodI.lift_word_prod_nontrivial_of_head_card
 
 --include hcard Porting note: commented out
 
@@ -798,13 +808,13 @@ theorem lift_word_prod_nontrivial_of_not_empty {i j} (w : NeWord H i j) : lift f
         intro heq1
         apply hw'
         simp [heq1]
-#align free_product.lift_word_prod_nontrivial_of_not_empty FreeProduct.lift_word_prod_nontrivial_of_not_empty
+#align free_product.lift_word_prod_nontrivial_of_not_empty Monoid.CoprodI.lift_word_prod_nontrivial_of_not_empty
 
 theorem empty_of_word_prod_eq_one {w : Word H} (h : lift f w.prod = 1) : w = Word.empty := by
   by_contra hnotempty
   obtain ⟨i, j, w, rfl⟩ := NeWord.of_word w hnotempty
   exact lift_word_prod_nontrivial_of_not_empty f hcard X hXnonempty hXdisj hpp w h
-#align free_product.empty_of_word_prod_eq_one FreeProduct.empty_of_word_prod_eq_one
+#align free_product.empty_of_word_prod_eq_one Monoid.CoprodI.empty_of_word_prod_eq_one
 
 /-- The Ping-Pong-Lemma.
 
@@ -822,25 +832,25 @@ condition is only needed if `# ι = 2`, and we accept `3 ≤ # ι` as an alterna
 theorem lift_injective_of_ping_pong : Function.Injective (lift f) := by
   classical
     apply (injective_iff_map_eq_one (lift f)).mpr
-    rw [(FreeProduct.Word.equiv).forall_congr_left']
+    rw [(CoprodI.Word.equiv).forall_congr_left']
     · intro w Heq
       dsimp [Word.equiv] at *
       · rw [empty_of_word_prod_eq_one f hcard X hXnonempty hXdisj hpp Heq]
         rfl
-#align free_product.lift_injective_of_ping_pong FreeProduct.lift_injective_of_ping_pong
+#align free_product.lift_injective_of_ping_pong Monoid.CoprodI.lift_injective_of_ping_pong
 
 end PingPongLemma
 
 /-- The free product of free groups is itself a free group -/
 @[simps!]  --Porting note: added `!`
 instance {ι : Type _} (G : ι → Type _) [∀ i, Group (G i)] [hG : ∀ i, IsFreeGroup (G i)] :
-    IsFreeGroup (FreeProduct G) where
+    IsFreeGroup (CoprodI G) where
   Generators := Σi, IsFreeGroup.Generators (G i)
   MulEquiv' :=
     MonoidHom.toMulEquiv
       (FreeGroup.lift fun x : Σi, IsFreeGroup.Generators (G i) =>
-        FreeProduct.of (IsFreeGroup.of x.2 : G x.1))
-      (FreeProduct.lift fun i : ι =>
+        CoprodI.of (IsFreeGroup.of x.2 : G x.1))
+      (CoprodI.lift fun i : ι =>
         (IsFreeGroup.lift fun x : IsFreeGroup.Generators (G i) =>
             FreeGroup.of (⟨i, x⟩ : Σi, IsFreeGroup.Generators (G i)) :
           G i →* FreeGroup (Σi, IsFreeGroup.Generators (G i))))
@@ -851,14 +861,14 @@ instance {ι : Type _} (G : ι → Type _) [∀ i, Group (G i)] [hG : ∀ i, IsF
 -- and using `Multiplicative ℤ` runs into diamond issues.
 /-- A free group is a free product of copies of the free_group over one generator. -/
 @[simps!]
-def _root_.freeGroupEquivFreeProduct {ι : Type u_1} :
-    FreeGroup ι ≃* FreeProduct fun _ : ι => FreeGroup Unit := by
+def _root_.freeGroupEquivCoprodI {ι : Type u_1} :
+    FreeGroup ι ≃* CoprodI fun _ : ι => FreeGroup Unit := by
   refine' MonoidHom.toMulEquiv _ _ _ _
-  exact FreeGroup.lift fun i => @FreeProduct.of ι _ _ i (FreeGroup.of Unit.unit)
-  exact FreeProduct.lift fun i => FreeGroup.lift fun _ => FreeGroup.of i
+  exact FreeGroup.lift fun i => @CoprodI.of ι _ _ i (FreeGroup.of Unit.unit)
+  exact CoprodI.lift fun i => FreeGroup.lift fun _ => FreeGroup.of i
   · ext; simp
   · ext i a; cases a; simp
-#align free_group_equiv_free_product freeGroupEquivFreeProduct
+#align free_group_equiv_free_product freeGroupEquivCoprodI
 
 section PingPongLemma
 
@@ -900,13 +910,13 @@ group to be generated by the elements.
 theorem _root_.FreeGroup.injective_lift_of_ping_pong : Function.Injective (FreeGroup.lift a) := by
   -- Step one: express the free group lift via the free product lift
   have : FreeGroup.lift a =
-      (FreeProduct.lift fun i => FreeGroup.lift fun _ => a i).comp
-        (@freeGroupEquivFreeProduct ι).toMonoidHom := by
+      (CoprodI.lift fun i => FreeGroup.lift fun _ => a i).comp
+        (@freeGroupEquivCoprodI ι).toMonoidHom := by
     ext i
     simp
   rw [this, MonoidHom.coe_comp]
   clear this
-  refine' Function.Injective.comp _ (MulEquiv.injective freeGroupEquivFreeProduct)
+  refine' Function.Injective.comp _ (MulEquiv.injective freeGroupEquivCoprodI)
   -- Step two: Invoke the ping-pong lemma for free products
   show Function.Injective (lift fun i : ι => FreeGroup.lift fun _ => a i)
   -- Prepare to instantiate lift_injective_of_ping_pong
@@ -991,4 +1001,4 @@ theorem _root_.FreeGroup.injective_lift_of_ping_pong : Function.Injective (FreeG
 
 end PingPongLemma
 
-end FreeProduct
+end Monoid.CoprodI
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

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

Diff
@@ -2,11 +2,6 @@
 Copyright (c) 2021 David Wärn. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: David Wärn, Joachim Breitner
-
-! This file was ported from Lean 3 source module group_theory.free_product
-! leanprover-community/mathlib commit 9114ddffa023340c9ec86965e00cdd6fe26fcdf6
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.Algebra.FreeMonoid.Basic
 import Mathlib.GroupTheory.Congruence
@@ -15,6 +10,8 @@ import Mathlib.Data.List.Chain
 import Mathlib.SetTheory.Cardinal.Ordinal
 import Mathlib.Data.Set.Pointwise.SMul
 
+#align_import group_theory.free_product from "leanprover-community/mathlib"@"9114ddffa023340c9ec86965e00cdd6fe26fcdf6"
+
 /-!
 # The free product of groups or monoids
 
chore: cleanup whitespace (#5988)

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

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

Diff
@@ -897,7 +897,7 @@ ways on disjoint subsets `X i` and `Y i` we can prove that `lift f` is injective
 of `lift f` is isomorphic to the free group.
 
 Often the Ping-Pong-Lemma is stated with regard to group elements that generate the whole group;
-we generalize to arbitrary group homomorphisms from the free group to `G`  and do not require the
+we generalize to arbitrary group homomorphisms from the free group to `G` and do not require the
 group to be generated by the elements.
 -/
 theorem _root_.FreeGroup.injective_lift_of_ping_pong : Function.Injective (FreeGroup.lift a) := by
chore: fix focusing dots (#5708)

This PR is the result of running

find . -type f -name "*.lean" -exec sed -i -E 's/^( +)\. /\1· /' {} \;
find . -type f -name "*.lean" -exec sed -i -E 'N;s/^( +·)\n +(.*)$/\1 \2/;P;D' {} \;

which firstly replaces . focusing dots with · and secondly removes isolated instances of such dots, unifying them with the following line. A new rule is placed in the style linter to verify this.

Diff
@@ -428,8 +428,8 @@ theorem of_smul_def (i) (w : Word M) (m : M i) :
 theorem cons_eq_smul {i} {m : M i} {ls h1 h2} :
     Word.mk (⟨i, m⟩::ls) h1 h2 = of m • mkAux ls h1 h2 := by
   rw [cons_eq_rcons, of_smul_def, equivPair_eq_of_fstIdx_ne _]
-  . simp
-  . rw [fstIdx_ne_iff]
+  · simp
+  · rw [fstIdx_ne_iff]
     exact (List.chain'_cons'.1 h2).1
 #align free_product.word.cons_eq_smul FreeProduct.Word.cons_eq_smul
 
@@ -950,10 +950,10 @@ theorem _root_.FreeGroup.injective_lift_of_ping_pong : Function.Injective (FreeG
         _ ⊆ X i := by
           clear hnne0 hlt
           refine Int.le_induction (P := fun n => a i ^ n • (Y i)ᶜ ⊆ X i) ?_ ?_ n h1n
-          . dsimp
+          · dsimp
             rw [zpow_one]
             exact hX i
-          . dsimp
+          · dsimp
             intro n _hle hi
             calc
               a i ^ (n + 1) • (Y i)ᶜ = (a i ^ n * a i) • (Y i)ᶜ := by rw [zpow_add, zpow_one]
fix: precedence of # (#5623)
Diff
@@ -709,7 +709,7 @@ variable {H : ι → Type _} [∀ i, Group (H i)]
 variable (f : ∀ i, H i →* G)
 
 -- We need many groups or one group with many elements
-variable (hcard : 3 ≤ (#ι) ∨ ∃ i, 3 ≤ (#H i))
+variable (hcard : 3 ≤ #ι ∨ ∃ i, 3 ≤ #(H i))
 
 -- A group action on α, and the ping-pong sets
 variable {α : Type _} [MulAction G α]
@@ -752,7 +752,7 @@ theorem lift_word_prod_nontrivial_of_head_eq_last {i} (w : NeWord H i i) : lift
   exact lift_word_prod_nontrivial_of_other_i f X hXnonempty hXdisj hpp w hk hk
 #align free_product.lift_word_prod_nontrivial_of_head_eq_last FreeProduct.lift_word_prod_nontrivial_of_head_eq_last
 
-theorem lift_word_prod_nontrivial_of_head_card {i j} (w : NeWord H i j) (hcard : 3 ≤ (#H i))
+theorem lift_word_prod_nontrivial_of_head_card {i j} (w : NeWord H i j) (hcard : 3 ≤ #(H i))
     (hheadtail : i ≠ j) : lift f w.prod ≠ 1 := by
   obtain ⟨h, hn1, hnh⟩ := Cardinal.three_le hcard 1 w.head⁻¹
   have hnot1 : h * w.head ≠ 1 := by
@@ -982,7 +982,7 @@ theorem _root_.FreeGroup.injective_lift_of_ping_pong : Function.Injective (FreeG
               _ ⊆ a i ^ n • (X i)ᶜ := (smul_set_mono (hXYdisj i i).symm.subset_compl_right)
               _ ⊆ Y i := hi
         _ ⊆ X' i := Set.subset_union_right _ _
-  show _ ∨ ∃ i, 3 ≤ (#H i)
+  show _ ∨ ∃ i, 3 ≤ #(H i)
   · inhabit ι
     right
     use Inhabited.default
fix: change compl precedence (#5586)

Co-authored-by: Yury G. Kudryashov <urkud@urkud.name>

Diff
@@ -884,9 +884,9 @@ variable (hYdisj : Pairwise fun i j => Disjoint (Y i) (Y j))
 
 variable (hXYdisj : ∀ i j, Disjoint (X i) (Y j))
 
-variable (hX : ∀ i, a i • Y iᶜ ⊆ X i)
+variable (hX : ∀ i, a i • (Y i)ᶜ ⊆ X i)
 
-variable (hY : ∀ i, a⁻¹ i • X iᶜ ⊆ Y i)
+variable (hY : ∀ i, a⁻¹ i • (X i)ᶜ ⊆ Y i)
 
 --include hXnonempty hXdisj hYdisj hXYdisj hX hY Porting note: commented out
 
@@ -945,41 +945,41 @@ theorem _root_.FreeGroup.injective_lift_of_ping_pong : Function.Injective (FreeG
     cases' (lt_or_gt_of_ne hnne0).symm with hlt hgt
     · have h1n : 1 ≤ n := hlt
       calc
-        a i ^ n • X' j ⊆ a i ^ n • Y iᶜ :=
+        a i ^ n • X' j ⊆ a i ^ n • (Y i)ᶜ :=
           smul_set_mono ((hXYdisj j i).union_left <| hYdisj hij.symm).subset_compl_right
         _ ⊆ X i := by
           clear hnne0 hlt
-          refine Int.le_induction (P := fun n => a i ^ n • Y iᶜ ⊆ X i) ?_ ?_ n h1n
+          refine Int.le_induction (P := fun n => a i ^ n • (Y i)ᶜ ⊆ X i) ?_ ?_ n h1n
           . dsimp
             rw [zpow_one]
             exact hX i
           . dsimp
             intro n _hle hi
             calc
-              a i ^ (n + 1) • Y iᶜ = (a i ^ n * a i) • Y iᶜ := by rw [zpow_add, zpow_one]
-              _ = a i ^ n • a i • Y iᶜ := (MulAction.mul_smul _ _ _)
+              a i ^ (n + 1) • (Y i)ᶜ = (a i ^ n * a i) • (Y i)ᶜ := by rw [zpow_add, zpow_one]
+              _ = a i ^ n • a i • (Y i)ᶜ := (MulAction.mul_smul _ _ _)
               _ ⊆ a i ^ n • X i := (smul_set_mono <| hX i)
-              _ ⊆ a i ^ n • Y iᶜ := (smul_set_mono (hXYdisj i i).subset_compl_right)
+              _ ⊆ a i ^ n • (Y i)ᶜ := (smul_set_mono (hXYdisj i i).subset_compl_right)
               _ ⊆ X i := hi
         _ ⊆ X' i := Set.subset_union_left _ _
     · have h1n : n ≤ -1 := by
         apply Int.le_of_lt_add_one
         simpa using hgt
       calc
-        a i ^ n • X' j ⊆ a i ^ n • X iᶜ :=
+        a i ^ n • X' j ⊆ a i ^ n • (X i)ᶜ :=
           smul_set_mono ((hXdisj hij.symm).union_left (hXYdisj i j).symm).subset_compl_right
         _ ⊆ Y i := by
-          refine' Int.le_induction_down (P := fun n => a i ^ n • X iᶜ ⊆ Y i) _ _ _ h1n
+          refine' Int.le_induction_down (P := fun n => a i ^ n • (X i)ᶜ ⊆ Y i) _ _ _ h1n
           · dsimp
             rw [zpow_neg, zpow_one]
             exact hY i
           · dsimp
             intro n _ hi
             calc
-              a i ^ (n - 1) • X iᶜ = (a i ^ n * (a i)⁻¹) • X iᶜ := by rw [zpow_sub, zpow_one]
-              _ = a i ^ n • (a i)⁻¹ • X iᶜ := (MulAction.mul_smul _ _ _)
+              a i ^ (n - 1) • (X i)ᶜ = (a i ^ n * (a i)⁻¹) • (X i)ᶜ := by rw [zpow_sub, zpow_one]
+              _ = a i ^ n • (a i)⁻¹ • (X i)ᶜ := (MulAction.mul_smul _ _ _)
               _ ⊆ a i ^ n • Y i := (smul_set_mono <| hY i)
-              _ ⊆ a i ^ n • X iᶜ := (smul_set_mono (hXYdisj i i).symm.subset_compl_right)
+              _ ⊆ a i ^ n • (X i)ᶜ := (smul_set_mono (hXYdisj i i).symm.subset_compl_right)
               _ ⊆ Y i := hi
         _ ⊆ X' i := Set.subset_union_right _ _
   show _ ∨ ∃ i, 3 ≤ (#H i)
chore: remove superfluous parentheses in calls to ext (#5258)

Co-authored-by: Xavier Roblot <46200072+xroblot@users.noreply.github.com> Co-authored-by: Joël Riou <joel.riou@universite-paris-saclay.fr> Co-authored-by: Riccardo Brasca <riccardo.brasca@gmail.com> Co-authored-by: Yury G. Kudryashov <urkud@urkud.name> Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com> Co-authored-by: Pol'tta / Miyahara Kō <pol_tta@outlook.jp> Co-authored-by: Jason Yuen <jason_yuen2007@hotmail.com> Co-authored-by: Mario Carneiro <di.gama@gmail.com> Co-authored-by: Jireh Loreaux <loreaujy@gmail.com> Co-authored-by: Ruben Van de Velde <65514131+Ruben-VandeVelde@users.noreply.github.com> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: Heather Macbeth <25316162+hrmacbeth@users.noreply.github.com> Co-authored-by: Jujian Zhang <jujian.zhang1998@outlook.com> Co-authored-by: Yaël Dillies <yael.dillies@gmail.com>

Diff
@@ -155,7 +155,7 @@ def lift : (∀ i, M i →* N) ≃ (FreeProduct M →* N) where
   invFun f i := f.comp of
   left_inv := by
     intro fi
-    ext (i x)
+    ext i x
     rw [MonoidHom.comp_apply, of_apply, Con.lift_mk', FreeMonoid.lift_eval_of]
   right_inv := by
     intro f
chore: formatting issues (#4947)

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

Diff
@@ -566,8 +566,8 @@ def toWord {i j} (w : NeWord M i j) : Word M
 #align free_product.neword.to_word FreeProduct.NeWord.toWord
 
 /-- Every nonempty `Word M` can be constructed as a `NeWord M i j` -/
-theorem of_word (w : Word M) (h : w ≠ empty) : ∃ (i j : _)(w' : NeWord M i j), w'.toWord = w := by
-  suffices : ∃ (i j : _)(w' : NeWord M i j), w'.toWord.toList = w.toList
+theorem of_word (w : Word M) (h : w ≠ empty) : ∃ (i j : _) (w' : NeWord M i j), w'.toWord = w := by
+  suffices : ∃ (i j : _) (w' : NeWord M i j), w'.toWord.toList = w.toList
   · rcases this with ⟨i, j, w, h⟩
     refine' ⟨i, j, w, _⟩
     ext
chore: fix many typos (#4967)

These are all doc fixes

Diff
@@ -137,7 +137,7 @@ theorem ext_hom (f g : FreeProduct M →* N) (h : ∀ i, f.comp (of : M i →* _
 #align free_product.ext_hom FreeProduct.ext_hom
 
 /-- A map out of the free product corresponds to a family of maps out of the summands. This is the
-universal property of the free product, charaterizing it as a categorical coproduct. -/
+universal property of the free product, characterizing it as a categorical coproduct. -/
 @[simps symm_apply]
 def lift : (∀ i, M i →* N) ≃ (FreeProduct M →* N) where
   toFun fi :=
chore: fix many typos (#4535)

Run codespell Mathlib and keep some suggestions.

Diff
@@ -484,7 +484,7 @@ variable (M)
 
 /-- A `NeWord M i j` is a representation of a non-empty reduced words where the first letter comes
 from `M i` and the last letter comes from `M j`. It can be constructed from singletons and via
-concatentation, and thus provides a useful induction principle. -/
+concatenation, and thus provides a useful induction principle. -/
 --@[nolint has_nonempty_instance] Porting note: commented out
 inductive NeWord : ι → ι → Type _
   | singleton : ∀ {i : ι} (x : M i), x ≠ 1 → NeWord i i
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
@@ -203,13 +203,13 @@ theorem lift_mrange_le {N} [Monoid N] (f : ∀ i, M i →* N) {s : Submonoid N}
     exact s.mul_mem hx hy
 #align free_product.lift_mrange_le FreeProduct.lift_mrange_le
 
-theorem mrange_eq_supᵢ {N} [Monoid N] (f : ∀ i, M i →* N) :
+theorem mrange_eq_iSup {N} [Monoid N] (f : ∀ i, M i →* N) :
     MonoidHom.mrange (lift f) = ⨆ i, MonoidHom.mrange (f i) := by
-  apply le_antisymm (lift_mrange_le f fun i => le_supᵢ (fun i => MonoidHom.mrange (f i)) i)
-  apply supᵢ_le _
+  apply le_antisymm (lift_mrange_le f fun i => le_iSup (fun i => MonoidHom.mrange (f i)) i)
+  apply iSup_le _
   rintro i _ ⟨x, rfl⟩
   exact ⟨of x, by simp only [lift_of]⟩
-#align free_product.mrange_eq_supr FreeProduct.mrange_eq_supᵢ
+#align free_product.mrange_eq_supr FreeProduct.mrange_eq_iSup
 
 section Group
 
@@ -251,12 +251,12 @@ theorem lift_range_le {N} [Group N] (f : ∀ i, G i →* N) {s : Subgroup N}
     exact s.mul_mem hx hy
 #align free_product.lift_range_le FreeProduct.lift_range_le
 
-theorem range_eq_supᵢ {N} [Group N] (f : ∀ i, G i →* N) : (lift f).range = ⨆ i, (f i).range := by
-  apply le_antisymm (lift_range_le _ f fun i => le_supᵢ (fun i => MonoidHom.range (f i)) i)
-  apply supᵢ_le _
+theorem range_eq_iSup {N} [Group N] (f : ∀ i, G i →* N) : (lift f).range = ⨆ i, (f i).range := by
+  apply le_antisymm (lift_range_le _ f fun i => le_iSup (fun i => MonoidHom.range (f i)) i)
+  apply iSup_le _
   rintro i _ ⟨x, rfl⟩
   exact ⟨of x, by simp only [lift_of]⟩
-#align free_product.range_eq_supr FreeProduct.range_eq_supᵢ
+#align free_product.range_eq_supr FreeProduct.range_eq_iSup
 
 end Group
 
chore: bye-bye, solo bys! (#3825)

This PR puts, with one exception, every single remaining by that lies all by itself on its own line to the previous line, thus matching the current behaviour of start-port.sh. The exception is when the by begins the second or later argument to a tuple or anonymous constructor; see https://github.com/leanprover-community/mathlib4/pull/3825#discussion_r1186702599.

Essentially this is s/\n *by$/ by/g, but with manual editing to satisfy the linter's max-100-char-line requirement. The Python style linter is also modified to catch these "isolated bys".

Diff
@@ -535,8 +535,7 @@ theorem toList_head? {i j} (w : NeWord M i j) : w.toList.head? = Option.some ⟨
 #align free_product.neword.to_list_head' FreeProduct.NeWord.toList_head?
 
 @[simp]
-theorem toList_getLast? {i j} (w : NeWord M i j) : w.toList.getLast? = Option.some ⟨j, w.last⟩ :=
-  by
+theorem toList_getLast? {i j} (w : NeWord M i j) : w.toList.getLast? = Option.some ⟨j, w.last⟩ := by
   rw [← Option.mem_def]
   induction w
   · rw [Option.mem_def]
Diff
@@ -410,7 +410,6 @@ theorem equivPair_eq_of_fstIdx_ne {i} {w : Word M} (h : fstIdx w ≠ some i) :
 instance summandAction (i) : MulAction (M i) (Word M) where
   smul m w := rcons { equivPair i w with head := m * (equivPair i w).head }
   one_smul w := by
-    simp_rw [one_mul]
     apply (equivPair i).symm_apply_eq.mpr
     simp [equivPair]
   mul_smul m m' w := by
feat: port GroupTheory.FreeProduct (#2979)

Dependencies 8 + 364

365 files ported (97.9%)
152150 lines ported (98.0%)
Show graph

The unported dependencies are