group_theory.free_product
⟷
Mathlib.GroupTheory.CoprodI
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.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(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)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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"
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -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"
mathlib commit https://github.com/leanprover-community/mathlib/commit/442a83d738cb208d3600056c489be16900ba701d
@@ -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]
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/63721b2c3eba6c325ecf8ae8cca27155a4f6306f
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/2a0ce625dbb0ffbc7d1316597de0b25c1ec75303
@@ -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
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -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,
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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 ι]
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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]
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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.
mathlib commit https://github.com/leanprover-community/mathlib/commit/95a87616d63b3cb49d3fe678d416fbe9c4217bf4
@@ -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.
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -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ₓ'. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/36b8aa61ea7c05727161f96a0532897bd72aedab
@@ -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.
mathlib commit https://github.com/leanprover-community/mathlib/commit/8b8ba04e2f326f3f7cf24ad129beda58531ada61
@@ -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ₓ'. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/55d771df074d0dd020139ee1cd4b95521422df9f
@@ -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ₓ'. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/b19481deb571022990f1baa9cbf9172e6757a479
@@ -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⁻¹ =
mathlib commit https://github.com/leanprover-community/mathlib/commit/57e09a1296bfb4330ddf6624f1028ba186117d82
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -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 _ _
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -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
@@ -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
Submonoid.closure
and CoprodI
(#12391)
CoprodI.lift_comp_of
, CoprodI.lift_comp_of'
,
CoprodI.lift_of'
, CoprodI.iSup_mrange_of
,
CoprodI.mclosure_iUnion_range_of
, CoprodI.induction_left
MonoidHom.mrange_id
, MonoidHom.mclosure_range
,
as well as additive versions.@@ -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)]
@@ -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)
@@ -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
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)
@@ -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.
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -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 <|
@@ -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
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>
@@ -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]
include/omit
porting notes (#10517)
@@ -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
@@ -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"
@@ -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
@@ -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
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.
@@ -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]
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
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.IsFreeGroup
is Prop-valued, and requires only the existence of a free group basis.@@ -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.
Removes nonterminal simps on lines looking like simp [...]
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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) :
@@ -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)
The main changes made here were
cons
constructor to make a new word where the underlying list is just cons
. Use this to simplify the definition of rcons
consRecOn
induction principle and use this to simpllify the definition of equivPairAux
, allowing me to delete the private def mkAux
rcons
and smul
@@ -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]
@@ -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
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -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 α)
@@ -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
@@ -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
@@ -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
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.
@@ -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]
@@ -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
@@ -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)
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>
@@ -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
@@ -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
@@ -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 :=
@@ -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
sSup
/iSup
(#3938)
As discussed on Zulip
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>
@@ -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
by
s! (#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 by
s".
@@ -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]
closes #3680, see https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/Stepping.20through.20simp_rw/near/326712986
@@ -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
The unported dependencies are