algebra.free_monoid.basicMathlib.Algebra.FreeMonoid.Basic

This file has been ported!

Changes since the initial port

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

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(last sync)

refactor(linear_algebra/tensor_product): make lift f (x ⊗ₜ y) = f x y true by rfl (#18121)

Since this is essentially the "primitive" recursor, it is very convenient for it to expand definitionally.

With this change, the following lemmas are now rfl:

  • algebra.mul'_apply
  • free_monoid.lift_comp_of
  • free_monoid.lift_eval_of
  • tensor_product.lie_module.lift_apply
  • alternating_map.dom_coprod'_apply
  • contract_left_apply
  • contract_right_apply
  • dual_tensor_hom_apply
  • derivation.tensor_product_to_tmul
  • poly_equiv_tensor.to_fun_linear_tmul_apply
  • tensor_product.lift.tmul
  • tensor_product.lift.tmul'
  • algebra.tensor_product.lift_tmul
  • algebra.tensor_product.lmul'_apply_tmul
  • tensor_product.algebra.smul_def

And one lemma is no longer rfl

  • free_monoid.lift_apply
Diff
@@ -136,27 +136,41 @@ lemma hom_eq ⦃f g : free_monoid α →* M⦄ (h : ∀ x, f (of x) = g (of x))
 monoid_hom.ext $ λ l, rec_on l (f.map_one.trans g.map_one.symm) $
   λ x xs hxs, by simp only [h, hxs, monoid_hom.map_mul]
 
+/-- A variant of `list.prod` that has `[x].prod = x` true definitionally.
+
+The purpose is to make `free_monoid.lift_eval_of` true by `rfl`. -/
+@[to_additive "A variant of `list.sum` that has `[x].sum = x` true definitionally.
+
+The purpose is to make `free_add_monoid.lift_eval_of` true by `rfl`."]
+def prod_aux {M} [monoid M] (l : list M) : M :=
+l.rec_on 1 (λ x xs (_ : M), list.foldl (*) x xs)
+
+@[to_additive]
+lemma prod_aux_eq : ∀ l : list M, free_monoid.prod_aux l = l.prod
+| [] := rfl
+| (x :: xs) := congr_arg (λ x, list.foldl (*) x xs) (one_mul _).symm
+
 /-- Equivalence between maps `α → M` and monoid homomorphisms `free_monoid α →* M`. -/
 @[to_additive "Equivalence between maps `α → A` and additive monoid homomorphisms
 `free_add_monoid α →+ A`."]
 def lift : (α → M) ≃ (free_monoid α →* M) :=
-{ to_fun := λ f, ⟨λ l, (l.to_list.map f).prod, rfl,
-    λ l₁ l₂, by simp only [to_list_mul, list.map_append, list.prod_append]⟩,
+{ to_fun := λ f, ⟨λ l, free_monoid.prod_aux (l.to_list.map f), rfl,
+    λ l₁ l₂, by simp only [prod_aux_eq, to_list_mul, list.map_append, list.prod_append]⟩,
   inv_fun := λ f x, f (of x),
-  left_inv := λ f, funext $ λ x, one_mul (f x),
-  right_inv := λ f, hom_eq $ λ x, one_mul (f (of x)) }
+  left_inv := λ f, rfl,
+  right_inv := λ f, hom_eq $ λ x, rfl }
 
 @[simp, to_additive]
 lemma lift_symm_apply (f : free_monoid α →* M) : lift.symm f = f ∘ of := rfl
 
 @[to_additive]
-lemma lift_apply (f : α → M) (l : free_monoid α) : lift f l = (l.to_list.map f).prod := rfl
+lemma lift_apply (f : α → M) (l : free_monoid α) : lift f l = (l.to_list.map f).prod :=
+prod_aux_eq _
 
-@[to_additive] lemma lift_comp_of (f : α → M) : lift f ∘ of = f := lift.symm_apply_apply f
+@[to_additive] lemma lift_comp_of (f : α → M) : lift f ∘ of = f := rfl
 
 @[simp, to_additive]
-lemma lift_eval_of (f : α → M) (x : α) : lift f (of x) = f x :=
-congr_fun (lift_comp_of f) x
+lemma lift_eval_of (f : α → M) (x : α) : lift f (of x) = f x := rfl
 
 @[simp, to_additive]
 lemma lift_restrict (f : free_monoid α →* M) : lift (f ∘ of) = f :=

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(first ported)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -3,7 +3,7 @@ Copyright (c) 2019 Simon Hudon. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Simon Hudon, Yury Kudryashov
 -/
-import Data.List.BigOperators.Basic
+import Algebra.BigOperators.List.Basic
 
 #align_import algebra.free_monoid.basic from "leanprover-community/mathlib"@"657df4339ae6ceada048c8a2980fb10e393143ec"
 
Diff
@@ -114,8 +114,8 @@ instance : CancelMonoid (FreeMonoid α)
   mul_one := List.append_nil
   one_mul := List.nil_append
   mul_assoc := List.append_assoc
-  hMul_left_cancel _ _ _ := List.append_left_cancel
-  hMul_right_cancel _ _ _ := List.append_right_cancel
+  hMul_left_cancel _ _ _ := List.append_cancel_left
+  hMul_right_cancel _ _ _ := List.append_cancel_right
 
 @[to_additive]
 instance : Inhabited (FreeMonoid α) :=
Diff
@@ -3,7 +3,7 @@ Copyright (c) 2019 Simon Hudon. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Simon Hudon, Yury Kudryashov
 -/
-import Mathbin.Data.List.BigOperators.Basic
+import Data.List.BigOperators.Basic
 
 #align_import algebra.free_monoid.basic from "leanprover-community/mathlib"@"657df4339ae6ceada048c8a2980fb10e393143ec"
 
Diff
@@ -114,8 +114,8 @@ instance : CancelMonoid (FreeMonoid α)
   mul_one := List.append_nil
   one_mul := List.nil_append
   mul_assoc := List.append_assoc
-  mul_left_cancel _ _ _ := List.append_left_cancel
-  mul_right_cancel _ _ _ := List.append_right_cancel
+  hMul_left_cancel _ _ _ := List.append_left_cancel
+  hMul_right_cancel _ _ _ := List.append_right_cancel
 
 @[to_additive]
 instance : Inhabited (FreeMonoid α) :=
@@ -389,7 +389,7 @@ def mkMulAction (f : α → β → β) : MulAction (FreeMonoid α) β
     where
   smul l b := l.toList.foldr f b
   one_smul x := rfl
-  mul_smul xs ys b := List.foldr_append _ _ _ _
+  hMul_smul xs ys b := List.foldr_append _ _ _ _
 #align free_monoid.mk_mul_action FreeMonoid.mkMulAction
 #align free_add_monoid.mk_add_action FreeAddMonoid.mkAddAction
 -/
Diff
@@ -2,14 +2,11 @@
 Copyright (c) 2019 Simon Hudon. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Simon Hudon, Yury Kudryashov
-
-! This file was ported from Lean 3 source module algebra.free_monoid.basic
-! leanprover-community/mathlib commit 657df4339ae6ceada048c8a2980fb10e393143ec
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.Data.List.BigOperators.Basic
 
+#align_import algebra.free_monoid.basic from "leanprover-community/mathlib"@"657df4339ae6ceada048c8a2980fb10e393143ec"
+
 /-!
 # Free monoid over a given alphabet
 
Diff
@@ -221,6 +221,7 @@ theorem of_injective : Function.Injective (@of α) :=
 #align free_add_monoid.of_injective FreeAddMonoid.of_injective
 -/
 
+#print FreeMonoid.recOn /-
 /-- Recursor for `free_monoid` using `1` and `free_monoid.of x * xs` instead of `[]` and
 `x :: xs`. -/
 @[elab_as_elim,
@@ -231,21 +232,27 @@ def recOn {C : FreeMonoid α → Sort _} (xs : FreeMonoid α) (h0 : C 1)
   List.recOn xs h0 ih
 #align free_monoid.rec_on FreeMonoid.recOn
 #align free_add_monoid.rec_on FreeAddMonoid.recOn
+-/
 
+#print FreeMonoid.recOn_one /-
 @[simp, to_additive]
 theorem recOn_one {C : FreeMonoid α → Sort _} (h0 : C 1) (ih : ∀ x xs, C xs → C (of x * xs)) :
     @recOn α C 1 h0 ih = h0 :=
   rfl
 #align free_monoid.rec_on_one FreeMonoid.recOn_one
 #align free_add_monoid.rec_on_zero FreeAddMonoid.recOn_zero
+-/
 
+#print FreeMonoid.recOn_of_mul /-
 @[simp, to_additive]
 theorem recOn_of_mul {C : FreeMonoid α → Sort _} (x : α) (xs : FreeMonoid α) (h0 : C 1)
     (ih : ∀ x xs, C xs → C (of x * xs)) : @recOn α C (of x * xs) h0 ih = ih x xs (recOn xs h0 ih) :=
   rfl
 #align free_monoid.rec_on_of_mul FreeMonoid.recOn_of_mul
 #align free_add_monoid.rec_on_of_add FreeAddMonoid.recOn_of_add
+-/
 
+#print FreeMonoid.casesOn /-
 /-- A version of `list.cases_on` for `free_monoid` using `1` and `free_monoid.of x * xs` instead of
 `[]` and `x :: xs`. -/
 @[elab_as_elim,
@@ -256,21 +263,27 @@ def casesOn {C : FreeMonoid α → Sort _} (xs : FreeMonoid α) (h0 : C 1)
   List.casesOn xs h0 ih
 #align free_monoid.cases_on FreeMonoid.casesOn
 #align free_add_monoid.cases_on FreeAddMonoid.casesOn
+-/
 
+#print FreeMonoid.casesOn_one /-
 @[simp, to_additive]
 theorem casesOn_one {C : FreeMonoid α → Sort _} (h0 : C 1) (ih : ∀ x xs, C (of x * xs)) :
     @casesOn α C 1 h0 ih = h0 :=
   rfl
 #align free_monoid.cases_on_one FreeMonoid.casesOn_one
 #align free_add_monoid.cases_on_zero FreeAddMonoid.casesOn_zero
+-/
 
+#print FreeMonoid.casesOn_of_mul /-
 @[simp, to_additive]
 theorem casesOn_of_mul {C : FreeMonoid α → Sort _} (x : α) (xs : FreeMonoid α) (h0 : C 1)
     (ih : ∀ x xs, C (of x * xs)) : @casesOn α C (of x * xs) h0 ih = ih x xs :=
   rfl
 #align free_monoid.cases_on_of_mul FreeMonoid.casesOn_of_mul
 #align free_add_monoid.cases_on_of_add FreeAddMonoid.casesOn_of_add
+-/
 
+#print FreeMonoid.hom_eq /-
 @[ext, to_additive]
 theorem hom_eq ⦃f g : FreeMonoid α →* M⦄ (h : ∀ x, f (of x) = g (of x)) : f = g :=
   MonoidHom.ext fun l =>
@@ -278,6 +291,7 @@ theorem hom_eq ⦃f g : FreeMonoid α →* M⦄ (h : ∀ x, f (of x) = g (of x))
       simp only [h, hxs, MonoidHom.map_mul]
 #align free_monoid.hom_eq FreeMonoid.hom_eq
 #align free_add_monoid.hom_eq FreeAddMonoid.hom_eq
+-/
 
 #print FreeMonoid.prodAux /-
 /-- A variant of `list.prod` that has `[x].prod = x` true definitionally.
@@ -291,13 +305,16 @@ def prodAux {M} [Monoid M] (l : List M) : M :=
 #align free_add_monoid.sum_aux FreeAddMonoid.sumAux
 -/
 
+#print FreeMonoid.prodAux_eq /-
 @[to_additive]
 theorem prodAux_eq : ∀ l : List M, FreeMonoid.prodAux l = l.Prod
   | [] => rfl
   | x :: xs => congr_arg (fun x => List.foldl (· * ·) x xs) (one_mul _).symm
 #align free_monoid.prod_aux_eq FreeMonoid.prodAux_eq
 #align free_add_monoid.sum_aux_eq FreeAddMonoid.sumAux_eq
+-/
 
+#print FreeMonoid.lift /-
 /-- Equivalence between maps `α → M` and monoid homomorphisms `free_monoid α →* M`. -/
 @[to_additive
       "Equivalence between maps `α → A` and additive monoid homomorphisms\n`free_add_monoid α →+ A`."]
@@ -311,48 +328,64 @@ def lift : (α → M) ≃ (FreeMonoid α →* M)
   right_inv f := hom_eq fun x => rfl
 #align free_monoid.lift FreeMonoid.lift
 #align free_add_monoid.lift FreeAddMonoid.lift
+-/
 
+#print FreeMonoid.lift_symm_apply /-
 @[simp, to_additive]
 theorem lift_symm_apply (f : FreeMonoid α →* M) : lift.symm f = f ∘ of :=
   rfl
 #align free_monoid.lift_symm_apply FreeMonoid.lift_symm_apply
 #align free_add_monoid.lift_symm_apply FreeAddMonoid.lift_symm_apply
+-/
 
+#print FreeMonoid.lift_apply /-
 @[to_additive]
 theorem lift_apply (f : α → M) (l : FreeMonoid α) : lift f l = (l.toList.map f).Prod :=
   prodAux_eq _
 #align free_monoid.lift_apply FreeMonoid.lift_apply
 #align free_add_monoid.lift_apply FreeAddMonoid.lift_apply
+-/
 
+#print FreeMonoid.lift_comp_of /-
 @[to_additive]
 theorem lift_comp_of (f : α → M) : lift f ∘ of = f :=
   rfl
 #align free_monoid.lift_comp_of FreeMonoid.lift_comp_of
 #align free_add_monoid.lift_comp_of FreeAddMonoid.lift_comp_of
+-/
 
+#print FreeMonoid.lift_eval_of /-
 @[simp, to_additive]
 theorem lift_eval_of (f : α → M) (x : α) : lift f (of x) = f x :=
   rfl
 #align free_monoid.lift_eval_of FreeMonoid.lift_eval_of
 #align free_add_monoid.lift_eval_of FreeAddMonoid.lift_eval_of
+-/
 
+#print FreeMonoid.lift_restrict /-
 @[simp, to_additive]
 theorem lift_restrict (f : FreeMonoid α →* M) : lift (f ∘ of) = f :=
   lift.apply_symm_apply f
 #align free_monoid.lift_restrict FreeMonoid.lift_restrict
 #align free_add_monoid.lift_restrict FreeAddMonoid.lift_restrict
+-/
 
+#print FreeMonoid.comp_lift /-
 @[to_additive]
 theorem comp_lift (g : M →* N) (f : α → M) : g.comp (lift f) = lift (g ∘ f) := by ext; simp
 #align free_monoid.comp_lift FreeMonoid.comp_lift
 #align free_add_monoid.comp_lift FreeAddMonoid.comp_lift
+-/
 
+#print FreeMonoid.hom_map_lift /-
 @[to_additive]
 theorem hom_map_lift (g : M →* N) (f : α → M) (x : FreeMonoid α) : g (lift f x) = lift (g ∘ f) x :=
   MonoidHom.ext_iff.1 (comp_lift g f) x
 #align free_monoid.hom_map_lift FreeMonoid.hom_map_lift
 #align free_add_monoid.hom_map_lift FreeAddMonoid.hom_map_lift
+-/
 
+#print FreeMonoid.mkMulAction /-
 /-- Define a multiplicative action of `free_monoid α` on `β`. -/
 @[to_additive "Define an additive action of `free_add_monoid α` on `β`."]
 def mkMulAction (f : α → β → β) : MulAction (FreeMonoid α) β
@@ -362,7 +395,9 @@ def mkMulAction (f : α → β → β) : MulAction (FreeMonoid α) β
   mul_smul xs ys b := List.foldr_append _ _ _ _
 #align free_monoid.mk_mul_action FreeMonoid.mkMulAction
 #align free_add_monoid.mk_add_action FreeAddMonoid.mkAddAction
+-/
 
+#print FreeMonoid.smul_def /-
 @[to_additive]
 theorem smul_def (f : α → β → β) (l : FreeMonoid α) (b : β) :
     haveI := mk_mul_action f
@@ -370,7 +405,9 @@ theorem smul_def (f : α → β → β) (l : FreeMonoid α) (b : β) :
   rfl
 #align free_monoid.smul_def FreeMonoid.smul_def
 #align free_add_monoid.vadd_def FreeAddMonoid.vadd_def
+-/
 
+#print FreeMonoid.ofList_smul /-
 @[to_additive]
 theorem ofList_smul (f : α → β → β) (l : List α) (b : β) :
     haveI := mk_mul_action f
@@ -378,6 +415,7 @@ theorem ofList_smul (f : α → β → β) (l : List α) (b : β) :
   rfl
 #align free_monoid.of_list_smul FreeMonoid.ofList_smul
 #align free_add_monoid.of_list_vadd FreeAddMonoid.ofList_vadd
+-/
 
 #print FreeMonoid.of_smul /-
 @[simp, to_additive]
@@ -390,6 +428,7 @@ theorem of_smul (f : α → β → β) (x : α) (y : β) :
 #align free_add_monoid.of_vadd FreeAddMonoid.of_vadd
 -/
 
+#print FreeMonoid.map /-
 /-- The unique monoid homomorphism `free_monoid α →* free_monoid β` that sends
 each `of x` to `of (f x)`. -/
 @[to_additive
@@ -401,42 +440,55 @@ def map (f : α → β) : FreeMonoid α →* FreeMonoid β
   map_mul' l₁ l₂ := List.map_append _ _ _
 #align free_monoid.map FreeMonoid.map
 #align free_add_monoid.map FreeAddMonoid.map
+-/
 
+#print FreeMonoid.map_of /-
 @[simp, to_additive]
 theorem map_of (f : α → β) (x : α) : map f (of x) = of (f x) :=
   rfl
 #align free_monoid.map_of FreeMonoid.map_of
 #align free_add_monoid.map_of FreeAddMonoid.map_of
+-/
 
+#print FreeMonoid.toList_map /-
 @[to_additive]
 theorem toList_map (f : α → β) (xs : FreeMonoid α) : (map f xs).toList = xs.toList.map f :=
   rfl
 #align free_monoid.to_list_map FreeMonoid.toList_map
 #align free_add_monoid.to_list_map FreeAddMonoid.toList_map
+-/
 
+#print FreeMonoid.ofList_map /-
 @[to_additive]
 theorem ofList_map (f : α → β) (xs : List α) : ofList (xs.map f) = map f (ofList xs) :=
   rfl
 #align free_monoid.of_list_map FreeMonoid.ofList_map
 #align free_add_monoid.of_list_map FreeAddMonoid.ofList_map
+-/
 
+#print FreeMonoid.lift_of_comp_eq_map /-
 @[to_additive]
 theorem lift_of_comp_eq_map (f : α → β) : (lift fun x => of (f x)) = map f :=
   hom_eq fun x => rfl
 #align free_monoid.lift_of_comp_eq_map FreeMonoid.lift_of_comp_eq_map
 #align free_add_monoid.lift_of_comp_eq_map FreeAddMonoid.lift_of_comp_eq_map
+-/
 
+#print FreeMonoid.map_comp /-
 @[to_additive]
 theorem map_comp (g : β → γ) (f : α → β) : map (g ∘ f) = (map g).comp (map f) :=
   hom_eq fun x => rfl
 #align free_monoid.map_comp FreeMonoid.map_comp
 #align free_add_monoid.map_comp FreeAddMonoid.map_comp
+-/
 
+#print FreeMonoid.map_id /-
 @[simp, to_additive]
 theorem map_id : map (@id α) = MonoidHom.id (FreeMonoid α) :=
   hom_eq fun x => rfl
 #align free_monoid.map_id FreeMonoid.map_id
 #align free_add_monoid.map_id FreeAddMonoid.map_id
+-/
 
 end FreeMonoid
 
Diff
@@ -221,12 +221,6 @@ theorem of_injective : Function.Injective (@of α) :=
 #align free_add_monoid.of_injective FreeAddMonoid.of_injective
 -/
 
-/- warning: free_monoid.rec_on -> FreeMonoid.recOn is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {C : (FreeMonoid.{u1} α) -> Sort.{u2}} (xs : FreeMonoid.{u1} α), (C (OfNat.ofNat.{u1} (FreeMonoid.{u1} α) 1 (OfNat.mk.{u1} (FreeMonoid.{u1} α) 1 (One.one.{u1} (FreeMonoid.{u1} α) (MulOneClass.toHasOne.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α))))))))) -> (forall (x : α) (xs : FreeMonoid.{u1} α), (C xs) -> (C (HMul.hMul.{u1, u1, u1} (FreeMonoid.{u1} α) (FreeMonoid.{u1} α) (FreeMonoid.{u1} α) (instHMul.{u1} (FreeMonoid.{u1} α) (MulOneClass.toHasMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))))) (FreeMonoid.of.{u1} α x) xs))) -> (C xs)
-but is expected to have type
-  forall {α : Type.{u1}} {C : (FreeMonoid.{u1} α) -> Sort.{u2}} (xs : FreeMonoid.{u1} α), (C (OfNat.ofNat.{u1} (FreeMonoid.{u1} α) 1 (One.toOfNat1.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toOne.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))))) -> (forall (x : α) (xs : FreeMonoid.{u1} α), (C xs) -> (C (HMul.hMul.{u1, u1, u1} (FreeMonoid.{u1} α) (FreeMonoid.{u1} α) (FreeMonoid.{u1} α) (instHMul.{u1} (FreeMonoid.{u1} α) (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))))) (FreeMonoid.of.{u1} α x) xs))) -> (C xs)
-Case conversion may be inaccurate. Consider using '#align free_monoid.rec_on FreeMonoid.recOnₓ'. -/
 /-- Recursor for `free_monoid` using `1` and `free_monoid.of x * xs` instead of `[]` and
 `x :: xs`. -/
 @[elab_as_elim,
@@ -238,12 +232,6 @@ def recOn {C : FreeMonoid α → Sort _} (xs : FreeMonoid α) (h0 : C 1)
 #align free_monoid.rec_on FreeMonoid.recOn
 #align free_add_monoid.rec_on FreeAddMonoid.recOn
 
-/- warning: free_monoid.rec_on_one -> FreeMonoid.recOn_one is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {C : (FreeMonoid.{u1} α) -> Sort.{u2}} (h0 : C (OfNat.ofNat.{u1} (FreeMonoid.{u1} α) 1 (OfNat.mk.{u1} (FreeMonoid.{u1} α) 1 (One.one.{u1} (FreeMonoid.{u1} α) (MulOneClass.toHasOne.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α))))))))) (ih : forall (x : α) (xs : FreeMonoid.{u1} α), (C xs) -> (C (HMul.hMul.{u1, u1, u1} (FreeMonoid.{u1} α) (FreeMonoid.{u1} α) (FreeMonoid.{u1} α) (instHMul.{u1} (FreeMonoid.{u1} α) (MulOneClass.toHasMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))))) (FreeMonoid.of.{u1} α x) xs))), Eq.{u2} (C (OfNat.ofNat.{u1} (FreeMonoid.{u1} α) 1 (OfNat.mk.{u1} (FreeMonoid.{u1} α) 1 (One.one.{u1} (FreeMonoid.{u1} α) (MulOneClass.toHasOne.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α))))))))) (FreeMonoid.recOn.{u1, u2} α C (OfNat.ofNat.{u1} (FreeMonoid.{u1} α) 1 (OfNat.mk.{u1} (FreeMonoid.{u1} α) 1 (One.one.{u1} (FreeMonoid.{u1} α) (MulOneClass.toHasOne.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))))))) h0 ih) h0
-but is expected to have type
-  forall {α : Type.{u2}} {C : (FreeMonoid.{u2} α) -> Sort.{u1}} (h0 : C (OfNat.ofNat.{u2} (FreeMonoid.{u2} α) 1 (One.toOfNat1.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toOne.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))))) (ih : forall (x : α) (xs : FreeMonoid.{u2} α), (C xs) -> (C (HMul.hMul.{u2, u2, u2} (FreeMonoid.{u2} α) (FreeMonoid.{u2} α) (FreeMonoid.{u2} α) (instHMul.{u2} (FreeMonoid.{u2} α) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))))) (FreeMonoid.of.{u2} α x) xs))), Eq.{u1} (C (OfNat.ofNat.{u2} (FreeMonoid.{u2} α) 1 (One.toOfNat1.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toOne.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))))) (FreeMonoid.recOn.{u2, u1} α C (OfNat.ofNat.{u2} (FreeMonoid.{u2} α) 1 (One.toOfNat1.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toOne.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) h0 ih) h0
-Case conversion may be inaccurate. Consider using '#align free_monoid.rec_on_one FreeMonoid.recOn_oneₓ'. -/
 @[simp, to_additive]
 theorem recOn_one {C : FreeMonoid α → Sort _} (h0 : C 1) (ih : ∀ x xs, C xs → C (of x * xs)) :
     @recOn α C 1 h0 ih = h0 :=
@@ -251,12 +239,6 @@ theorem recOn_one {C : FreeMonoid α → Sort _} (h0 : C 1) (ih : ∀ x xs, C xs
 #align free_monoid.rec_on_one FreeMonoid.recOn_one
 #align free_add_monoid.rec_on_zero FreeAddMonoid.recOn_zero
 
-/- warning: free_monoid.rec_on_of_mul -> FreeMonoid.recOn_of_mul is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {C : (FreeMonoid.{u1} α) -> Sort.{u2}} (x : α) (xs : FreeMonoid.{u1} α) (h0 : C (OfNat.ofNat.{u1} (FreeMonoid.{u1} α) 1 (OfNat.mk.{u1} (FreeMonoid.{u1} α) 1 (One.one.{u1} (FreeMonoid.{u1} α) (MulOneClass.toHasOne.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α))))))))) (ih : forall (x : α) (xs : FreeMonoid.{u1} α), (C xs) -> (C (HMul.hMul.{u1, u1, u1} (FreeMonoid.{u1} α) (FreeMonoid.{u1} α) (FreeMonoid.{u1} α) (instHMul.{u1} (FreeMonoid.{u1} α) (MulOneClass.toHasMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))))) (FreeMonoid.of.{u1} α x) xs))), Eq.{u2} (C (HMul.hMul.{u1, u1, u1} (FreeMonoid.{u1} α) (FreeMonoid.{u1} α) (FreeMonoid.{u1} α) (instHMul.{u1} (FreeMonoid.{u1} α) (MulOneClass.toHasMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))))) (FreeMonoid.of.{u1} α x) xs)) (FreeMonoid.recOn.{u1, u2} α C (HMul.hMul.{u1, u1, u1} (FreeMonoid.{u1} α) (FreeMonoid.{u1} α) (FreeMonoid.{u1} α) (instHMul.{u1} (FreeMonoid.{u1} α) (MulOneClass.toHasMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))))) (FreeMonoid.of.{u1} α x) xs) h0 ih) (ih x xs (FreeMonoid.recOn.{u1, u2} α (fun (_x : FreeMonoid.{u1} α) => C _x) xs h0 ih))
-but is expected to have type
-  forall {α : Type.{u2}} {C : (FreeMonoid.{u2} α) -> Sort.{u1}} (x : α) (xs : FreeMonoid.{u2} α) (h0 : C (OfNat.ofNat.{u2} (FreeMonoid.{u2} α) 1 (One.toOfNat1.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toOne.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))))) (ih : forall (x : α) (xs : FreeMonoid.{u2} α), (C xs) -> (C (HMul.hMul.{u2, u2, u2} (FreeMonoid.{u2} α) (FreeMonoid.{u2} α) (FreeMonoid.{u2} α) (instHMul.{u2} (FreeMonoid.{u2} α) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))))) (FreeMonoid.of.{u2} α x) xs))), Eq.{u1} (C (HMul.hMul.{u2, u2, u2} (FreeMonoid.{u2} α) (FreeMonoid.{u2} α) (FreeMonoid.{u2} α) (instHMul.{u2} (FreeMonoid.{u2} α) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))))) (FreeMonoid.of.{u2} α x) xs)) (FreeMonoid.recOn.{u2, u1} α C (HMul.hMul.{u2, u2, u2} (FreeMonoid.{u2} α) (FreeMonoid.{u2} α) (FreeMonoid.{u2} α) (instHMul.{u2} (FreeMonoid.{u2} α) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))))) (FreeMonoid.of.{u2} α x) xs) h0 ih) (ih x xs (FreeMonoid.recOn.{u2, u1} α (fun (_x : FreeMonoid.{u2} α) => C _x) xs h0 ih))
-Case conversion may be inaccurate. Consider using '#align free_monoid.rec_on_of_mul FreeMonoid.recOn_of_mulₓ'. -/
 @[simp, to_additive]
 theorem recOn_of_mul {C : FreeMonoid α → Sort _} (x : α) (xs : FreeMonoid α) (h0 : C 1)
     (ih : ∀ x xs, C xs → C (of x * xs)) : @recOn α C (of x * xs) h0 ih = ih x xs (recOn xs h0 ih) :=
@@ -264,12 +246,6 @@ theorem recOn_of_mul {C : FreeMonoid α → Sort _} (x : α) (xs : FreeMonoid α
 #align free_monoid.rec_on_of_mul FreeMonoid.recOn_of_mul
 #align free_add_monoid.rec_on_of_add FreeAddMonoid.recOn_of_add
 
-/- warning: free_monoid.cases_on -> FreeMonoid.casesOn is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {C : (FreeMonoid.{u1} α) -> Sort.{u2}} (xs : FreeMonoid.{u1} α), (C (OfNat.ofNat.{u1} (FreeMonoid.{u1} α) 1 (OfNat.mk.{u1} (FreeMonoid.{u1} α) 1 (One.one.{u1} (FreeMonoid.{u1} α) (MulOneClass.toHasOne.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α))))))))) -> (forall (x : α) (xs : FreeMonoid.{u1} α), C (HMul.hMul.{u1, u1, u1} (FreeMonoid.{u1} α) (FreeMonoid.{u1} α) (FreeMonoid.{u1} α) (instHMul.{u1} (FreeMonoid.{u1} α) (MulOneClass.toHasMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))))) (FreeMonoid.of.{u1} α x) xs)) -> (C xs)
-but is expected to have type
-  forall {α : Type.{u1}} {C : (FreeMonoid.{u1} α) -> Sort.{u2}} (xs : FreeMonoid.{u1} α), (C (OfNat.ofNat.{u1} (FreeMonoid.{u1} α) 1 (One.toOfNat1.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toOne.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))))) -> (forall (x : α) (xs : FreeMonoid.{u1} α), C (HMul.hMul.{u1, u1, u1} (FreeMonoid.{u1} α) (FreeMonoid.{u1} α) (FreeMonoid.{u1} α) (instHMul.{u1} (FreeMonoid.{u1} α) (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))))) (FreeMonoid.of.{u1} α x) xs)) -> (C xs)
-Case conversion may be inaccurate. Consider using '#align free_monoid.cases_on FreeMonoid.casesOnₓ'. -/
 /-- A version of `list.cases_on` for `free_monoid` using `1` and `free_monoid.of x * xs` instead of
 `[]` and `x :: xs`. -/
 @[elab_as_elim,
@@ -281,12 +257,6 @@ def casesOn {C : FreeMonoid α → Sort _} (xs : FreeMonoid α) (h0 : C 1)
 #align free_monoid.cases_on FreeMonoid.casesOn
 #align free_add_monoid.cases_on FreeAddMonoid.casesOn
 
-/- warning: free_monoid.cases_on_one -> FreeMonoid.casesOn_one is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {C : (FreeMonoid.{u1} α) -> Sort.{u2}} (h0 : C (OfNat.ofNat.{u1} (FreeMonoid.{u1} α) 1 (OfNat.mk.{u1} (FreeMonoid.{u1} α) 1 (One.one.{u1} (FreeMonoid.{u1} α) (MulOneClass.toHasOne.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α))))))))) (ih : forall (x : α) (xs : FreeMonoid.{u1} α), C (HMul.hMul.{u1, u1, u1} (FreeMonoid.{u1} α) (FreeMonoid.{u1} α) (FreeMonoid.{u1} α) (instHMul.{u1} (FreeMonoid.{u1} α) (MulOneClass.toHasMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))))) (FreeMonoid.of.{u1} α x) xs)), Eq.{u2} (C (OfNat.ofNat.{u1} (FreeMonoid.{u1} α) 1 (OfNat.mk.{u1} (FreeMonoid.{u1} α) 1 (One.one.{u1} (FreeMonoid.{u1} α) (MulOneClass.toHasOne.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α))))))))) (FreeMonoid.casesOn.{u1, u2} α C (OfNat.ofNat.{u1} (FreeMonoid.{u1} α) 1 (OfNat.mk.{u1} (FreeMonoid.{u1} α) 1 (One.one.{u1} (FreeMonoid.{u1} α) (MulOneClass.toHasOne.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))))))) h0 ih) h0
-but is expected to have type
-  forall {α : Type.{u2}} {C : (FreeMonoid.{u2} α) -> Sort.{u1}} (h0 : C (OfNat.ofNat.{u2} (FreeMonoid.{u2} α) 1 (One.toOfNat1.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toOne.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))))) (ih : forall (x : α) (xs : FreeMonoid.{u2} α), C (HMul.hMul.{u2, u2, u2} (FreeMonoid.{u2} α) (FreeMonoid.{u2} α) (FreeMonoid.{u2} α) (instHMul.{u2} (FreeMonoid.{u2} α) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))))) (FreeMonoid.of.{u2} α x) xs)), Eq.{u1} (C (OfNat.ofNat.{u2} (FreeMonoid.{u2} α) 1 (One.toOfNat1.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toOne.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))))) (FreeMonoid.casesOn.{u2, u1} α C (OfNat.ofNat.{u2} (FreeMonoid.{u2} α) 1 (One.toOfNat1.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toOne.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) h0 ih) h0
-Case conversion may be inaccurate. Consider using '#align free_monoid.cases_on_one FreeMonoid.casesOn_oneₓ'. -/
 @[simp, to_additive]
 theorem casesOn_one {C : FreeMonoid α → Sort _} (h0 : C 1) (ih : ∀ x xs, C (of x * xs)) :
     @casesOn α C 1 h0 ih = h0 :=
@@ -294,12 +264,6 @@ theorem casesOn_one {C : FreeMonoid α → Sort _} (h0 : C 1) (ih : ∀ x xs, C
 #align free_monoid.cases_on_one FreeMonoid.casesOn_one
 #align free_add_monoid.cases_on_zero FreeAddMonoid.casesOn_zero
 
-/- warning: free_monoid.cases_on_of_mul -> FreeMonoid.casesOn_of_mul is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {C : (FreeMonoid.{u1} α) -> Sort.{u2}} (x : α) (xs : FreeMonoid.{u1} α) (h0 : C (OfNat.ofNat.{u1} (FreeMonoid.{u1} α) 1 (OfNat.mk.{u1} (FreeMonoid.{u1} α) 1 (One.one.{u1} (FreeMonoid.{u1} α) (MulOneClass.toHasOne.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α))))))))) (ih : forall (x : α) (xs : FreeMonoid.{u1} α), C (HMul.hMul.{u1, u1, u1} (FreeMonoid.{u1} α) (FreeMonoid.{u1} α) (FreeMonoid.{u1} α) (instHMul.{u1} (FreeMonoid.{u1} α) (MulOneClass.toHasMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))))) (FreeMonoid.of.{u1} α x) xs)), Eq.{u2} (C (HMul.hMul.{u1, u1, u1} (FreeMonoid.{u1} α) (FreeMonoid.{u1} α) (FreeMonoid.{u1} α) (instHMul.{u1} (FreeMonoid.{u1} α) (MulOneClass.toHasMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))))) (FreeMonoid.of.{u1} α x) xs)) (FreeMonoid.casesOn.{u1, u2} α C (HMul.hMul.{u1, u1, u1} (FreeMonoid.{u1} α) (FreeMonoid.{u1} α) (FreeMonoid.{u1} α) (instHMul.{u1} (FreeMonoid.{u1} α) (MulOneClass.toHasMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))))) (FreeMonoid.of.{u1} α x) xs) h0 ih) (ih x xs)
-but is expected to have type
-  forall {α : Type.{u2}} {C : (FreeMonoid.{u2} α) -> Sort.{u1}} (x : α) (xs : FreeMonoid.{u2} α) (h0 : C (OfNat.ofNat.{u2} (FreeMonoid.{u2} α) 1 (One.toOfNat1.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toOne.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))))) (ih : forall (x : α) (xs : FreeMonoid.{u2} α), C (HMul.hMul.{u2, u2, u2} (FreeMonoid.{u2} α) (FreeMonoid.{u2} α) (FreeMonoid.{u2} α) (instHMul.{u2} (FreeMonoid.{u2} α) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))))) (FreeMonoid.of.{u2} α x) xs)), Eq.{u1} (C (HMul.hMul.{u2, u2, u2} (FreeMonoid.{u2} α) (FreeMonoid.{u2} α) (FreeMonoid.{u2} α) (instHMul.{u2} (FreeMonoid.{u2} α) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))))) (FreeMonoid.of.{u2} α x) xs)) (FreeMonoid.casesOn.{u2, u1} α C (HMul.hMul.{u2, u2, u2} (FreeMonoid.{u2} α) (FreeMonoid.{u2} α) (FreeMonoid.{u2} α) (instHMul.{u2} (FreeMonoid.{u2} α) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))))) (FreeMonoid.of.{u2} α x) xs) h0 ih) (ih x xs)
-Case conversion may be inaccurate. Consider using '#align free_monoid.cases_on_of_mul FreeMonoid.casesOn_of_mulₓ'. -/
 @[simp, to_additive]
 theorem casesOn_of_mul {C : FreeMonoid α → Sort _} (x : α) (xs : FreeMonoid α) (h0 : C 1)
     (ih : ∀ x xs, C (of x * xs)) : @casesOn α C (of x * xs) h0 ih = ih x xs :=
@@ -307,12 +271,6 @@ theorem casesOn_of_mul {C : FreeMonoid α → Sort _} (x : α) (xs : FreeMonoid
 #align free_monoid.cases_on_of_mul FreeMonoid.casesOn_of_mul
 #align free_add_monoid.cases_on_of_add FreeAddMonoid.casesOn_of_add
 
-/- warning: free_monoid.hom_eq -> FreeMonoid.hom_eq is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] {{f : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)}} {{g : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)}}, (forall (x : α), Eq.{succ u2} M (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) => (FreeMonoid.{u1} α) -> M) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f (FreeMonoid.of.{u1} α x)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) => (FreeMonoid.{u1} α) -> M) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) g (FreeMonoid.of.{u1} α x))) -> (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f g)
-but is expected to have type
-  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] {{f : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)}} {{g : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)}}, (forall (x : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u2} α) => M) (FreeMonoid.of.{u2} α x)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) f (FreeMonoid.of.{u2} α x)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) g (FreeMonoid.of.{u2} α x))) -> (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f g)
-Case conversion may be inaccurate. Consider using '#align free_monoid.hom_eq FreeMonoid.hom_eqₓ'. -/
 @[ext, to_additive]
 theorem hom_eq ⦃f g : FreeMonoid α →* M⦄ (h : ∀ x, f (of x) = g (of x)) : f = g :=
   MonoidHom.ext fun l =>
@@ -333,12 +291,6 @@ def prodAux {M} [Monoid M] (l : List M) : M :=
 #align free_add_monoid.sum_aux FreeAddMonoid.sumAux
 -/
 
-/- warning: free_monoid.prod_aux_eq -> FreeMonoid.prodAux_eq is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (l : List.{u1} M), Eq.{succ u1} M (FreeMonoid.prodAux.{u1} M _inst_1 l) (List.prod.{u1} M (MulOneClass.toHasMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MulOneClass.toHasOne.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) l)
-but is expected to have type
-  forall {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (l : List.{u1} M), Eq.{succ u1} M (FreeMonoid.prodAux.{u1} M _inst_1 l) (List.prod.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (Monoid.toOne.{u1} M _inst_1) l)
-Case conversion may be inaccurate. Consider using '#align free_monoid.prod_aux_eq FreeMonoid.prodAux_eqₓ'. -/
 @[to_additive]
 theorem prodAux_eq : ∀ l : List M, FreeMonoid.prodAux l = l.Prod
   | [] => rfl
@@ -346,12 +298,6 @@ theorem prodAux_eq : ∀ l : List M, FreeMonoid.prodAux l = l.Prod
 #align free_monoid.prod_aux_eq FreeMonoid.prodAux_eq
 #align free_add_monoid.sum_aux_eq FreeAddMonoid.sumAux_eq
 
-/- warning: free_monoid.lift -> FreeMonoid.lift is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M], Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))
-but is expected to have type
-  forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M], Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))
-Case conversion may be inaccurate. Consider using '#align free_monoid.lift FreeMonoid.liftₓ'. -/
 /-- Equivalence between maps `α → M` and monoid homomorphisms `free_monoid α →* M`. -/
 @[to_additive
       "Equivalence between maps `α → A` and additive monoid homomorphisms\n`free_add_monoid α →+ A`."]
@@ -366,92 +312,47 @@ def lift : (α → M) ≃ (FreeMonoid α →* M)
 #align free_monoid.lift FreeMonoid.lift
 #align free_add_monoid.lift FreeAddMonoid.lift
 
-/- warning: free_monoid.lift_symm_apply -> FreeMonoid.lift_symm_apply is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] (f : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)), Eq.{max (succ u1) (succ u2)} (α -> M) (coeFn.{max 1 (max (max (succ u2) (succ u1)) (succ u1) (succ u2)) (max (succ u1) (succ u2)) (succ u2) (succ u1), max (max (succ u2) (succ u1)) (succ u1) (succ u2)} (Equiv.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (α -> M)) (fun (_x : Equiv.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (α -> M)) => (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) -> α -> M) (Equiv.hasCoeToFun.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (α -> M)) (Equiv.symm.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (FreeMonoid.lift.{u1, u2} α M _inst_1)) f) (Function.comp.{succ u1, succ u1, succ u2} α (FreeMonoid.{u1} α) M (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) => (FreeMonoid.{u1} α) -> M) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f) (FreeMonoid.of.{u1} α))
-but is expected to have type
-  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (f : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) => α -> M) f) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (α -> M)) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (fun (_x : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) => α -> M) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (α -> M)) (Equiv.symm.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.lift.{u2, u1} α M _inst_1)) f) (Function.comp.{succ u2, succ u2, succ u1} α (FreeMonoid.{u2} α) M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) f) (FreeMonoid.of.{u2} α))
-Case conversion may be inaccurate. Consider using '#align free_monoid.lift_symm_apply FreeMonoid.lift_symm_applyₓ'. -/
 @[simp, to_additive]
 theorem lift_symm_apply (f : FreeMonoid α →* M) : lift.symm f = f ∘ of :=
   rfl
 #align free_monoid.lift_symm_apply FreeMonoid.lift_symm_apply
 #align free_add_monoid.lift_symm_apply FreeAddMonoid.lift_symm_apply
 
-/- warning: free_monoid.lift_apply -> FreeMonoid.lift_apply is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] (f : α -> M) (l : FreeMonoid.{u1} α), Eq.{succ u2} M (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) => (FreeMonoid.{u1} α) -> M) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ u2) (succ u1)) (max (succ u2) (succ u1)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) => (α -> M) -> (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (FreeMonoid.lift.{u1, u2} α M _inst_1) f) l) (List.prod.{u2} M (MulOneClass.toHasMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toHasOne.{u2} M (Monoid.toMulOneClass.{u2} M _inst_1)) (List.map.{u1, u2} α M f (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (FreeMonoid.{u1} α) (List.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} (FreeMonoid.{u1} α) (List.{u1} α)) => (FreeMonoid.{u1} α) -> (List.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} (FreeMonoid.{u1} α) (List.{u1} α)) (FreeMonoid.toList.{u1} α) l)))
-but is expected to have type
-  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (f : α -> M) (l : FreeMonoid.{u2} α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u2} α) => M) l) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) (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 u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (FreeMonoid.lift.{u2, u1} α M _inst_1) f) l) (List.prod.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (Monoid.toOne.{u1} M _inst_1) (List.map.{u2, u1} α M f (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : FreeMonoid.{u2} α) => List.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.toList.{u2} α) l)))
-Case conversion may be inaccurate. Consider using '#align free_monoid.lift_apply FreeMonoid.lift_applyₓ'. -/
 @[to_additive]
 theorem lift_apply (f : α → M) (l : FreeMonoid α) : lift f l = (l.toList.map f).Prod :=
   prodAux_eq _
 #align free_monoid.lift_apply FreeMonoid.lift_apply
 #align free_add_monoid.lift_apply FreeAddMonoid.lift_apply
 
-/- warning: free_monoid.lift_comp_of -> FreeMonoid.lift_comp_of is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] (f : α -> M), Eq.{max (succ u1) (succ u2)} (α -> M) (Function.comp.{succ u1, succ u1, succ u2} α (FreeMonoid.{u1} α) M (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) => (FreeMonoid.{u1} α) -> M) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ u2) (succ u1)) (max (succ u2) (succ u1)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) => (α -> M) -> (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (FreeMonoid.lift.{u1, u2} α M _inst_1) f)) (FreeMonoid.of.{u1} α)) f
-but is expected to have type
-  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (f : α -> M), Eq.{max (succ u2) (succ u1)} (α -> M) (Function.comp.{succ u2, succ u2, succ u1} α (FreeMonoid.{u2} α) M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) (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 u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (FreeMonoid.lift.{u2, u1} α M _inst_1) f)) (FreeMonoid.of.{u2} α)) f
-Case conversion may be inaccurate. Consider using '#align free_monoid.lift_comp_of FreeMonoid.lift_comp_ofₓ'. -/
 @[to_additive]
 theorem lift_comp_of (f : α → M) : lift f ∘ of = f :=
   rfl
 #align free_monoid.lift_comp_of FreeMonoid.lift_comp_of
 #align free_add_monoid.lift_comp_of FreeAddMonoid.lift_comp_of
 
-/- warning: free_monoid.lift_eval_of -> FreeMonoid.lift_eval_of is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] (f : α -> M) (x : α), Eq.{succ u2} M (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) => (FreeMonoid.{u1} α) -> M) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ u2) (succ u1)) (max (succ u2) (succ u1)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) => (α -> M) -> (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (FreeMonoid.lift.{u1, u2} α M _inst_1) f) (FreeMonoid.of.{u1} α x)) (f x)
-but is expected to have type
-  forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] (f : α -> M) (x : α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u1} α) => M) (FreeMonoid.of.{u1} α x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f) (FreeMonoid.{u1} α) (fun (_x : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u1} α) => M) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f) (FreeMonoid.{u1} α) M (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f) (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1) (MonoidHom.monoidHomClass.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)))) (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 u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (FreeMonoid.lift.{u1, u2} α M _inst_1) f) (FreeMonoid.of.{u1} α x)) (f x)
-Case conversion may be inaccurate. Consider using '#align free_monoid.lift_eval_of FreeMonoid.lift_eval_ofₓ'. -/
 @[simp, to_additive]
 theorem lift_eval_of (f : α → M) (x : α) : lift f (of x) = f x :=
   rfl
 #align free_monoid.lift_eval_of FreeMonoid.lift_eval_of
 #align free_add_monoid.lift_eval_of FreeAddMonoid.lift_eval_of
 
-/- warning: free_monoid.lift_restrict -> FreeMonoid.lift_restrict is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] (f : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)), Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ u2) (succ u1)) (max (succ u2) (succ u1)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) => (α -> M) -> (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (FreeMonoid.lift.{u1, u2} α M _inst_1) (Function.comp.{succ u1, succ u1, succ u2} α (FreeMonoid.{u1} α) M (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) => (FreeMonoid.{u1} α) -> M) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f) (FreeMonoid.of.{u1} α))) f
-but is expected to have type
-  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (f : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (Function.comp.{succ u2, succ u2, succ u1} α (FreeMonoid.{u2} α) M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (a : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u2} α) => M) a) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) f) (FreeMonoid.of.{u2} α))) (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 u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (FreeMonoid.lift.{u2, u1} α M _inst_1) (Function.comp.{succ u2, succ u2, succ u1} α (FreeMonoid.{u2} α) M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) f) (FreeMonoid.of.{u2} α))) f
-Case conversion may be inaccurate. Consider using '#align free_monoid.lift_restrict FreeMonoid.lift_restrictₓ'. -/
 @[simp, to_additive]
 theorem lift_restrict (f : FreeMonoid α →* M) : lift (f ∘ of) = f :=
   lift.apply_symm_apply f
 #align free_monoid.lift_restrict FreeMonoid.lift_restrict
 #align free_add_monoid.lift_restrict FreeAddMonoid.lift_restrict
 
-/- warning: free_monoid.comp_lift -> FreeMonoid.comp_lift is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] {N : Type.{u3}} [_inst_2 : Monoid.{u3} N] (g : MonoidHom.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) (f : α -> M), Eq.{max (succ u3) (succ u1)} (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2)) (MonoidHom.comp.{u1, u2, u3} (FreeMonoid.{u1} α) M N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2) g (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ u2) (succ u1)) (max (succ u2) (succ u1)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) => (α -> M) -> (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (FreeMonoid.lift.{u1, u2} α M _inst_1) f)) (coeFn.{max 1 (max (max (succ u1) (succ u3)) (succ u3) (succ u1)) (max (succ u3) (succ u1)) (succ u1) (succ u3), max (max (succ u1) (succ u3)) (succ u3) (succ u1)} (Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> N) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2))) (fun (_x : Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> N) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2))) => (α -> N) -> (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2))) (Equiv.hasCoeToFun.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> N) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2))) (FreeMonoid.lift.{u1, u3} α N _inst_2) (Function.comp.{succ u1, succ u2, succ u3} α M N (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) (fun (_x : MonoidHom.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) => M -> N) (MonoidHom.hasCoeToFun.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) g) f))
-but is expected to have type
-  forall {α : Type.{u1}} {M : Type.{u3}} [_inst_1 : Monoid.{u3} M] {N : Type.{u2}} [_inst_2 : Monoid.{u2} N] (g : MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) (f : α -> M), Eq.{max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHom.comp.{u1, u3, u2} (FreeMonoid.{u1} α) M N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) g (FunLike.coe.{max (succ u3) (succ u1), max (succ u3) (succ u1), max (succ u3) (succ u1)} (Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (FreeMonoid.lift.{u1, u3} α M _inst_1) f)) (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 u2) (succ u1)} (α -> N) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2))) (α -> N) (fun (_x : α -> N) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (α -> N) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2))) (FreeMonoid.lift.{u1, u2} α N _inst_2) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f))
-Case conversion may be inaccurate. Consider using '#align free_monoid.comp_lift FreeMonoid.comp_liftₓ'. -/
 @[to_additive]
 theorem comp_lift (g : M →* N) (f : α → M) : g.comp (lift f) = lift (g ∘ f) := by ext; simp
 #align free_monoid.comp_lift FreeMonoid.comp_lift
 #align free_add_monoid.comp_lift FreeAddMonoid.comp_lift
 
-/- warning: free_monoid.hom_map_lift -> FreeMonoid.hom_map_lift is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align free_monoid.hom_map_lift FreeMonoid.hom_map_liftₓ'. -/
 @[to_additive]
 theorem hom_map_lift (g : M →* N) (f : α → M) (x : FreeMonoid α) : g (lift f x) = lift (g ∘ f) x :=
   MonoidHom.ext_iff.1 (comp_lift g f) x
 #align free_monoid.hom_map_lift FreeMonoid.hom_map_lift
 #align free_add_monoid.hom_map_lift FreeAddMonoid.hom_map_lift
 
-/- warning: free_monoid.mk_mul_action -> FreeMonoid.mkMulAction is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}}, (α -> β -> β) -> (MulAction.{u1, u2} (FreeMonoid.{u1} α) β (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α))))
-but is expected to have type
-  forall {α : Type.{u1}} {β : Type.{u2}}, (α -> β -> β) -> (MulAction.{u1, u2} (FreeMonoid.{u1} α) β (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))
-Case conversion may be inaccurate. Consider using '#align free_monoid.mk_mul_action FreeMonoid.mkMulActionₓ'. -/
 /-- Define a multiplicative action of `free_monoid α` on `β`. -/
 @[to_additive "Define an additive action of `free_add_monoid α` on `β`."]
 def mkMulAction (f : α → β → β) : MulAction (FreeMonoid α) β
@@ -462,12 +363,6 @@ def mkMulAction (f : α → β → β) : MulAction (FreeMonoid α) β
 #align free_monoid.mk_mul_action FreeMonoid.mkMulAction
 #align free_add_monoid.mk_add_action FreeAddMonoid.mkAddAction
 
-/- warning: free_monoid.smul_def -> FreeMonoid.smul_def is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} (f : α -> β -> β) (l : FreeMonoid.{u1} α) (b : β), Eq.{succ u2} β (SMul.smul.{u1, u2} (FreeMonoid.{u1} α) β (MulAction.toHasSmul.{u1, u2} (FreeMonoid.{u1} α) β (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α))) (FreeMonoid.mkMulAction.{u1, u2} α β f)) l b) (List.foldr.{u1, u2} α β f b (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (FreeMonoid.{u1} α) (List.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} (FreeMonoid.{u1} α) (List.{u1} α)) => (FreeMonoid.{u1} α) -> (List.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} (FreeMonoid.{u1} α) (List.{u1} α)) (FreeMonoid.toList.{u1} α) l))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} (f : α -> β -> β) (l : FreeMonoid.{u2} α) (b : β), Eq.{succ u1} β (HSMul.hSMul.{u2, u1, u1} (FreeMonoid.{u2} α) β β (instHSMul.{u2, u1} (FreeMonoid.{u2} α) β (MulAction.toSMul.{u2, u1} (FreeMonoid.{u2} α) β (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))) (FreeMonoid.mkMulAction.{u2, u1} α β f))) l b) (List.foldr.{u2, u1} α β f b (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : FreeMonoid.{u2} α) => List.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.toList.{u2} α) l))
-Case conversion may be inaccurate. Consider using '#align free_monoid.smul_def FreeMonoid.smul_defₓ'. -/
 @[to_additive]
 theorem smul_def (f : α → β → β) (l : FreeMonoid α) (b : β) :
     haveI := mk_mul_action f
@@ -476,12 +371,6 @@ theorem smul_def (f : α → β → β) (l : FreeMonoid α) (b : β) :
 #align free_monoid.smul_def FreeMonoid.smul_def
 #align free_add_monoid.vadd_def FreeAddMonoid.vadd_def
 
-/- warning: free_monoid.of_list_smul -> FreeMonoid.ofList_smul is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} (f : α -> β -> β) (l : List.{u1} α) (b : β), Eq.{succ u2} β (SMul.smul.{u1, u2} (FreeMonoid.{u1} α) β (MulAction.toHasSmul.{u1, u2} (FreeMonoid.{u1} α) β (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α))) (FreeMonoid.mkMulAction.{u1, u2} α β f)) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (List.{u1} α) (FreeMonoid.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} (List.{u1} α) (FreeMonoid.{u1} α)) => (List.{u1} α) -> (FreeMonoid.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} (List.{u1} α) (FreeMonoid.{u1} α)) (FreeMonoid.ofList.{u1} α) l) b) (List.foldr.{u1, u2} α β f b l)
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} (f : α -> β -> β) (l : List.{u2} α) (b : β), Eq.{succ u1} β (HSMul.hSMul.{u2, u1, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : List.{u2} α) => FreeMonoid.{u2} α) l) β β (instHSMul.{u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : List.{u2} α) => FreeMonoid.{u2} α) l) β (MulAction.toSMul.{u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : List.{u2} α) => FreeMonoid.{u2} α) l) β (RightCancelMonoid.toMonoid.{u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : List.{u2} α) => FreeMonoid.{u2} α) l) (CancelMonoid.toRightCancelMonoid.{u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : List.{u2} α) => FreeMonoid.{u2} α) l) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))) (FreeMonoid.mkMulAction.{u2, u1} α β f))) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (List.{u2} α) (FreeMonoid.{u2} α)) (List.{u2} α) (fun (_x : List.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : List.{u2} α) => FreeMonoid.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (List.{u2} α) (FreeMonoid.{u2} α)) (FreeMonoid.ofList.{u2} α) l) b) (List.foldr.{u2, u1} α β f b l)
-Case conversion may be inaccurate. Consider using '#align free_monoid.of_list_smul FreeMonoid.ofList_smulₓ'. -/
 @[to_additive]
 theorem ofList_smul (f : α → β → β) (l : List α) (b : β) :
     haveI := mk_mul_action f
@@ -501,12 +390,6 @@ theorem of_smul (f : α → β → β) (x : α) (y : β) :
 #align free_add_monoid.of_vadd FreeAddMonoid.of_vadd
 -/
 
-/- warning: free_monoid.map -> FreeMonoid.map is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}}, (α -> β) -> (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β)))))
-but is expected to have type
-  forall {α : Type.{u1}} {β : Type.{u2}}, (α -> β) -> (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β)))))
-Case conversion may be inaccurate. Consider using '#align free_monoid.map FreeMonoid.mapₓ'. -/
 /-- The unique monoid homomorphism `free_monoid α →* free_monoid β` that sends
 each `of x` to `of (f x)`. -/
 @[to_additive
@@ -519,72 +402,36 @@ def map (f : α → β) : FreeMonoid α →* FreeMonoid β
 #align free_monoid.map FreeMonoid.map
 #align free_add_monoid.map FreeAddMonoid.map
 
-/- warning: free_monoid.map_of -> FreeMonoid.map_of is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} (f : α -> β) (x : α), Eq.{succ u2} (FreeMonoid.{u2} β) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) => (FreeMonoid.{u1} α) -> (FreeMonoid.{u2} β)) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) (FreeMonoid.map.{u1, u2} α β f) (FreeMonoid.of.{u1} α x)) (FreeMonoid.of.{u2} β (f x))
-but is expected to have type
-  forall {α : Type.{u1}} {β : Type.{u2}} (f : α -> β) (x : α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u1} α) => FreeMonoid.{u2} β) (FreeMonoid.of.{u1} α x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))) (FreeMonoid.{u1} α) (fun (_x : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u1} α) => FreeMonoid.{u2} β) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))) (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))) (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β)))) (MonoidHom.monoidHomClass.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))))) (FreeMonoid.map.{u1, u2} α β f) (FreeMonoid.of.{u1} α x)) (FreeMonoid.of.{u2} β (f x))
-Case conversion may be inaccurate. Consider using '#align free_monoid.map_of FreeMonoid.map_ofₓ'. -/
 @[simp, to_additive]
 theorem map_of (f : α → β) (x : α) : map f (of x) = of (f x) :=
   rfl
 #align free_monoid.map_of FreeMonoid.map_of
 #align free_add_monoid.map_of FreeAddMonoid.map_of
 
-/- warning: free_monoid.to_list_map -> FreeMonoid.toList_map is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} (f : α -> β) (xs : FreeMonoid.{u1} α), Eq.{succ u2} (List.{u2} β) (coeFn.{succ u2, succ u2} (Equiv.{succ u2, succ u2} (FreeMonoid.{u2} β) (List.{u2} β)) (fun (_x : Equiv.{succ u2, succ u2} (FreeMonoid.{u2} β) (List.{u2} β)) => (FreeMonoid.{u2} β) -> (List.{u2} β)) (Equiv.hasCoeToFun.{succ u2, succ u2} (FreeMonoid.{u2} β) (List.{u2} β)) (FreeMonoid.toList.{u2} β) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) => (FreeMonoid.{u1} α) -> (FreeMonoid.{u2} β)) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) (FreeMonoid.map.{u1, u2} α β f) xs)) (List.map.{u1, u2} α β f (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (FreeMonoid.{u1} α) (List.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} (FreeMonoid.{u1} α) (List.{u1} α)) => (FreeMonoid.{u1} α) -> (List.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} (FreeMonoid.{u1} α) (List.{u1} α)) (FreeMonoid.toList.{u1} α) xs))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} (f : α -> β) (xs : FreeMonoid.{u2} α), Eq.{succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : FreeMonoid.{u1} β) => List.{u1} β) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (fun (a : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u2} α) => FreeMonoid.{u1} β) a) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))))) (FreeMonoid.map.{u2, u1} α β f) xs)) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} (FreeMonoid.{u1} β) (List.{u1} β)) (FreeMonoid.{u1} β) (fun (_x : FreeMonoid.{u1} β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : FreeMonoid.{u1} β) => List.{u1} β) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} (FreeMonoid.{u1} β) (List.{u1} β)) (FreeMonoid.toList.{u1} β) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u2} α) => FreeMonoid.{u1} β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))))) (FreeMonoid.map.{u2, u1} α β f) xs)) (List.map.{u2, u1} α β f (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : FreeMonoid.{u2} α) => List.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.toList.{u2} α) xs))
-Case conversion may be inaccurate. Consider using '#align free_monoid.to_list_map FreeMonoid.toList_mapₓ'. -/
 @[to_additive]
 theorem toList_map (f : α → β) (xs : FreeMonoid α) : (map f xs).toList = xs.toList.map f :=
   rfl
 #align free_monoid.to_list_map FreeMonoid.toList_map
 #align free_add_monoid.to_list_map FreeAddMonoid.toList_map
 
-/- warning: free_monoid.of_list_map -> FreeMonoid.ofList_map is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} (f : α -> β) (xs : List.{u1} α), Eq.{succ u2} (FreeMonoid.{u2} β) (coeFn.{succ u2, succ u2} (Equiv.{succ u2, succ u2} (List.{u2} β) (FreeMonoid.{u2} β)) (fun (_x : Equiv.{succ u2, succ u2} (List.{u2} β) (FreeMonoid.{u2} β)) => (List.{u2} β) -> (FreeMonoid.{u2} β)) (Equiv.hasCoeToFun.{succ u2, succ u2} (List.{u2} β) (FreeMonoid.{u2} β)) (FreeMonoid.ofList.{u2} β) (List.map.{u1, u2} α β f xs)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) => (FreeMonoid.{u1} α) -> (FreeMonoid.{u2} β)) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) (FreeMonoid.map.{u1, u2} α β f) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (List.{u1} α) (FreeMonoid.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} (List.{u1} α) (FreeMonoid.{u1} α)) => (List.{u1} α) -> (FreeMonoid.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} (List.{u1} α) (FreeMonoid.{u1} α)) (FreeMonoid.ofList.{u1} α) xs))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} (f : α -> β) (xs : List.{u2} α), Eq.{succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : List.{u1} β) => FreeMonoid.{u1} β) (List.map.{u2, u1} α β f xs)) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} (List.{u1} β) (FreeMonoid.{u1} β)) (List.{u1} β) (fun (_x : List.{u1} β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : List.{u1} β) => FreeMonoid.{u1} β) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} (List.{u1} β) (FreeMonoid.{u1} β)) (FreeMonoid.ofList.{u1} β) (List.map.{u2, u1} α β f xs)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u2} α) => FreeMonoid.{u1} β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))))) (FreeMonoid.map.{u2, u1} α β f) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (List.{u2} α) (FreeMonoid.{u2} α)) (List.{u2} α) (fun (_x : List.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : List.{u2} α) => FreeMonoid.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (List.{u2} α) (FreeMonoid.{u2} α)) (FreeMonoid.ofList.{u2} α) xs))
-Case conversion may be inaccurate. Consider using '#align free_monoid.of_list_map FreeMonoid.ofList_mapₓ'. -/
 @[to_additive]
 theorem ofList_map (f : α → β) (xs : List α) : ofList (xs.map f) = map f (ofList xs) :=
   rfl
 #align free_monoid.of_list_map FreeMonoid.ofList_map
 #align free_add_monoid.of_list_map FreeAddMonoid.ofList_map
 
-/- warning: free_monoid.lift_of_comp_eq_map -> FreeMonoid.lift_of_comp_eq_map is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} (f : α -> β), Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ u2) (succ u1)) (max (succ u2) (succ u1)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> (FreeMonoid.{u2} β)) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β)))))) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> (FreeMonoid.{u2} β)) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β)))))) => (α -> (FreeMonoid.{u2} β)) -> (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β)))))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> (FreeMonoid.{u2} β)) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β)))))) (FreeMonoid.lift.{u1, u2} α (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β)))) (fun (x : α) => FreeMonoid.of.{u2} β (f x))) (FreeMonoid.map.{u1, u2} α β f)
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} (f : α -> β), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> (FreeMonoid.{u1} β)) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (fun (x : α) => FreeMonoid.of.{u1} β (f x))) (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 u2)} (α -> (FreeMonoid.{u1} β)) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))))) (α -> (FreeMonoid.{u1} β)) (fun (_x : α -> (FreeMonoid.{u1} β)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> (FreeMonoid.{u1} β)) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (α -> (FreeMonoid.{u1} β)) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))))) (FreeMonoid.lift.{u2, u1} α (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))) (fun (x : α) => FreeMonoid.of.{u1} β (f x))) (FreeMonoid.map.{u2, u1} α β f)
-Case conversion may be inaccurate. Consider using '#align free_monoid.lift_of_comp_eq_map FreeMonoid.lift_of_comp_eq_mapₓ'. -/
 @[to_additive]
 theorem lift_of_comp_eq_map (f : α → β) : (lift fun x => of (f x)) = map f :=
   hom_eq fun x => rfl
 #align free_monoid.lift_of_comp_eq_map FreeMonoid.lift_of_comp_eq_map
 #align free_add_monoid.lift_of_comp_eq_map FreeAddMonoid.lift_of_comp_eq_map
 
-/- warning: free_monoid.map_comp -> FreeMonoid.map_comp is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} (g : β -> γ) (f : α -> β), Eq.{max (succ u3) (succ u1)} (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) (FreeMonoid.{u3} γ) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} (FreeMonoid.{u3} γ) (RightCancelMonoid.toMonoid.{u3} (FreeMonoid.{u3} γ) (CancelMonoid.toRightCancelMonoid.{u3} (FreeMonoid.{u3} γ) (FreeMonoid.cancelMonoid.{u3} γ))))) (FreeMonoid.map.{u1, u3} α γ (Function.comp.{succ u1, succ u2, succ u3} α β γ g f)) (MonoidHom.comp.{u1, u2, u3} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (FreeMonoid.{u3} γ) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β)))) (Monoid.toMulOneClass.{u3} (FreeMonoid.{u3} γ) (RightCancelMonoid.toMonoid.{u3} (FreeMonoid.{u3} γ) (CancelMonoid.toRightCancelMonoid.{u3} (FreeMonoid.{u3} γ) (FreeMonoid.cancelMonoid.{u3} γ)))) (FreeMonoid.map.{u2, u3} β γ g) (FreeMonoid.map.{u1, u2} α β f))
-but is expected to have type
-  forall {α : Type.{u3}} {β : Type.{u1}} {γ : Type.{u2}} (g : β -> γ) (f : α -> β), Eq.{max (succ u3) (succ u2)} (MonoidHom.{u3, u2} (FreeMonoid.{u3} α) (FreeMonoid.{u2} γ) (Monoid.toMulOneClass.{u3} (FreeMonoid.{u3} α) (RightCancelMonoid.toMonoid.{u3} (FreeMonoid.{u3} α) (CancelMonoid.toRightCancelMonoid.{u3} (FreeMonoid.{u3} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u3} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} γ) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} γ) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} γ) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} γ))))) (FreeMonoid.map.{u3, u2} α γ (Function.comp.{succ u3, succ u1, succ u2} α β γ g f)) (MonoidHom.comp.{u3, u1, u2} (FreeMonoid.{u3} α) (FreeMonoid.{u1} β) (FreeMonoid.{u2} γ) (Monoid.toMulOneClass.{u3} (FreeMonoid.{u3} α) (RightCancelMonoid.toMonoid.{u3} (FreeMonoid.{u3} α) (CancelMonoid.toRightCancelMonoid.{u3} (FreeMonoid.{u3} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u3} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} γ) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} γ) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} γ) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} γ)))) (FreeMonoid.map.{u1, u2} β γ g) (FreeMonoid.map.{u3, u1} α β f))
-Case conversion may be inaccurate. Consider using '#align free_monoid.map_comp FreeMonoid.map_compₓ'. -/
 @[to_additive]
 theorem map_comp (g : β → γ) (f : α → β) : map (g ∘ f) = (map g).comp (map f) :=
   hom_eq fun x => rfl
 #align free_monoid.map_comp FreeMonoid.map_comp
 #align free_add_monoid.map_comp FreeAddMonoid.map_comp
 
-/- warning: free_monoid.map_id -> FreeMonoid.map_id is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}}, Eq.{succ u1} (MonoidHom.{u1, u1} (FreeMonoid.{u1} α) (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α))))) (FreeMonoid.map.{u1, u1} α α (id.{succ u1} α)) (MonoidHom.id.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))))
-but is expected to have type
-  forall {α : Type.{u1}}, Eq.{succ u1} (MonoidHom.{u1, u1} (FreeMonoid.{u1} α) (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (FreeMonoid.map.{u1, u1} α α (id.{succ u1} α)) (MonoidHom.id.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))))
-Case conversion may be inaccurate. Consider using '#align free_monoid.map_id FreeMonoid.map_idₓ'. -/
 @[simp, to_additive]
 theorem map_id : map (@id α) = MonoidHom.id (FreeMonoid α) :=
   hom_eq fun x => rfl
Diff
@@ -433,10 +433,7 @@ but is expected to have type
   forall {α : Type.{u1}} {M : Type.{u3}} [_inst_1 : Monoid.{u3} M] {N : Type.{u2}} [_inst_2 : Monoid.{u2} N] (g : MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) (f : α -> M), Eq.{max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHom.comp.{u1, u3, u2} (FreeMonoid.{u1} α) M N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) g (FunLike.coe.{max (succ u3) (succ u1), max (succ u3) (succ u1), max (succ u3) (succ u1)} (Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (FreeMonoid.lift.{u1, u3} α M _inst_1) f)) (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 u2) (succ u1)} (α -> N) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2))) (α -> N) (fun (_x : α -> N) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (α -> N) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2))) (FreeMonoid.lift.{u1, u2} α N _inst_2) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f))
 Case conversion may be inaccurate. Consider using '#align free_monoid.comp_lift FreeMonoid.comp_liftₓ'. -/
 @[to_additive]
-theorem comp_lift (g : M →* N) (f : α → M) : g.comp (lift f) = lift (g ∘ f) :=
-  by
-  ext
-  simp
+theorem comp_lift (g : M →* N) (f : α → M) : g.comp (lift f) = lift (g ∘ f) := by ext; simp
 #align free_monoid.comp_lift FreeMonoid.comp_lift
 #align free_add_monoid.comp_lift FreeAddMonoid.comp_lift
 
Diff
@@ -441,10 +441,7 @@ theorem comp_lift (g : M →* N) (f : α → M) : g.comp (lift f) = lift (g ∘
 #align free_add_monoid.comp_lift FreeAddMonoid.comp_lift
 
 /- warning: free_monoid.hom_map_lift -> FreeMonoid.hom_map_lift is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] {N : Type.{u3}} [_inst_2 : Monoid.{u3} N] (g : MonoidHom.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) (f : α -> M) (x : FreeMonoid.{u1} α), Eq.{succ u3} N (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) (fun (_x : MonoidHom.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) => M -> N) (MonoidHom.hasCoeToFun.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) g (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) => (FreeMonoid.{u1} α) -> M) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ u2) (succ u1)) (max (succ u2) (succ u1)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) => (α -> M) -> (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (FreeMonoid.lift.{u1, u2} α M _inst_1) f) x)) (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2)) (fun (_x : MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2)) => (FreeMonoid.{u1} α) -> N) (MonoidHom.hasCoeToFun.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2)) (coeFn.{max 1 (max (max (succ u1) (succ u3)) (succ u3) (succ u1)) (max (succ u3) (succ u1)) (succ u1) (succ u3), max (max (succ u1) (succ u3)) (succ u3) (succ u1)} (Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> N) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2))) (fun (_x : Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> N) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2))) => (α -> N) -> (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2))) (Equiv.hasCoeToFun.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> N) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2))) (FreeMonoid.lift.{u1, u3} α N _inst_2) (Function.comp.{succ u1, succ u2, succ u3} α M N (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) (fun (_x : MonoidHom.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) => M -> N) (MonoidHom.hasCoeToFun.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) g) f)) x)
-but is expected to have type
-  forall {α : Type.{u1}} {M : Type.{u3}} [_inst_1 : Monoid.{u3} M] {N : Type.{u2}} [_inst_2 : Monoid.{u2} N] (g : MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) (f : α -> M) (x : FreeMonoid.{u1} α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) (fun (a : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u1} α) => M) a) (MulHomClass.toFunLike.{max u1 u3, u1, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) M (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u1 u3, u1, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1) (MonoidHom.monoidHomClass.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)))) (FunLike.coe.{max (succ u3) (succ u1), max (succ u3) (succ u1), max (succ u3) (succ u1)} (Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (α -> M) (fun (a : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) a) (Equiv.instFunLikeEquiv.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (FreeMonoid.lift.{u1, u3} α M _inst_1) f) x)) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) (fun (_x : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u1} α) => M) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) M (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u1 u3, u1, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1) (MonoidHom.monoidHomClass.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)))) (FunLike.coe.{max (succ u3) (succ u1), max (succ u3) (succ u1), max (succ u3) (succ u1)} (Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (FreeMonoid.lift.{u1, u3} α M _inst_1) f) x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f)) (FreeMonoid.{u1} α) (fun (_x : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u1} α) => N) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f)) (FreeMonoid.{u1} α) N (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f)) (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)))) (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 u2) (succ u1)} (α -> N) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2))) (α -> N) (fun (_x : α -> N) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (α -> N) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2))) (FreeMonoid.lift.{u1, u2} α N _inst_2) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f)) x)
+<too large>
 Case conversion may be inaccurate. Consider using '#align free_monoid.hom_map_lift FreeMonoid.hom_map_liftₓ'. -/
 @[to_additive]
 theorem hom_map_lift (g : M →* N) (f : α → M) (x : FreeMonoid α) : g (lift f x) = lift (g ∘ f) x :=
Diff
@@ -311,7 +311,7 @@ theorem casesOn_of_mul {C : FreeMonoid α → Sort _} (x : α) (xs : FreeMonoid
 lean 3 declaration is
   forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] {{f : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)}} {{g : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)}}, (forall (x : α), Eq.{succ u2} M (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) => (FreeMonoid.{u1} α) -> M) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f (FreeMonoid.of.{u1} α x)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) => (FreeMonoid.{u1} α) -> M) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) g (FreeMonoid.of.{u1} α x))) -> (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f g)
 but is expected to have type
-  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] {{f : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)}} {{g : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)}}, (forall (x : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u2} α) => M) (FreeMonoid.of.{u2} α x)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) f (FreeMonoid.of.{u2} α x)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) g (FreeMonoid.of.{u2} α x))) -> (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f g)
+  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] {{f : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)}} {{g : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)}}, (forall (x : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u2} α) => M) (FreeMonoid.of.{u2} α x)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) f (FreeMonoid.of.{u2} α x)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) g (FreeMonoid.of.{u2} α x))) -> (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f g)
 Case conversion may be inaccurate. Consider using '#align free_monoid.hom_eq FreeMonoid.hom_eqₓ'. -/
 @[ext, to_additive]
 theorem hom_eq ⦃f g : FreeMonoid α →* M⦄ (h : ∀ x, f (of x) = g (of x)) : f = g :=
@@ -370,7 +370,7 @@ def lift : (α → M) ≃ (FreeMonoid α →* M)
 lean 3 declaration is
   forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] (f : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)), Eq.{max (succ u1) (succ u2)} (α -> M) (coeFn.{max 1 (max (max (succ u2) (succ u1)) (succ u1) (succ u2)) (max (succ u1) (succ u2)) (succ u2) (succ u1), max (max (succ u2) (succ u1)) (succ u1) (succ u2)} (Equiv.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (α -> M)) (fun (_x : Equiv.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (α -> M)) => (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) -> α -> M) (Equiv.hasCoeToFun.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (α -> M)) (Equiv.symm.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (FreeMonoid.lift.{u1, u2} α M _inst_1)) f) (Function.comp.{succ u1, succ u1, succ u2} α (FreeMonoid.{u1} α) M (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) => (FreeMonoid.{u1} α) -> M) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f) (FreeMonoid.of.{u1} α))
 but is expected to have type
-  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (f : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) => α -> M) f) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (α -> M)) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (fun (_x : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) => α -> M) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (α -> M)) (Equiv.symm.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.lift.{u2, u1} α M _inst_1)) f) (Function.comp.{succ u2, succ u2, succ u1} α (FreeMonoid.{u2} α) M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) f) (FreeMonoid.of.{u2} α))
+  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (f : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) => α -> M) f) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (α -> M)) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (fun (_x : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) => α -> M) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (α -> M)) (Equiv.symm.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.lift.{u2, u1} α M _inst_1)) f) (Function.comp.{succ u2, succ u2, succ u1} α (FreeMonoid.{u2} α) M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) f) (FreeMonoid.of.{u2} α))
 Case conversion may be inaccurate. Consider using '#align free_monoid.lift_symm_apply FreeMonoid.lift_symm_applyₓ'. -/
 @[simp, to_additive]
 theorem lift_symm_apply (f : FreeMonoid α →* M) : lift.symm f = f ∘ of :=
@@ -382,7 +382,7 @@ theorem lift_symm_apply (f : FreeMonoid α →* M) : lift.symm f = f ∘ of :=
 lean 3 declaration is
   forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] (f : α -> M) (l : FreeMonoid.{u1} α), Eq.{succ u2} M (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) => (FreeMonoid.{u1} α) -> M) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ u2) (succ u1)) (max (succ u2) (succ u1)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) => (α -> M) -> (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (FreeMonoid.lift.{u1, u2} α M _inst_1) f) l) (List.prod.{u2} M (MulOneClass.toHasMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toHasOne.{u2} M (Monoid.toMulOneClass.{u2} M _inst_1)) (List.map.{u1, u2} α M f (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (FreeMonoid.{u1} α) (List.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} (FreeMonoid.{u1} α) (List.{u1} α)) => (FreeMonoid.{u1} α) -> (List.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} (FreeMonoid.{u1} α) (List.{u1} α)) (FreeMonoid.toList.{u1} α) l)))
 but is expected to have type
-  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (f : α -> M) (l : FreeMonoid.{u2} α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u2} α) => M) l) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) (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 u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (FreeMonoid.lift.{u2, u1} α M _inst_1) f) l) (List.prod.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (Monoid.toOne.{u1} M _inst_1) (List.map.{u2, u1} α M f (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : FreeMonoid.{u2} α) => List.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.toList.{u2} α) l)))
+  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (f : α -> M) (l : FreeMonoid.{u2} α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u2} α) => M) l) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) (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 u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (FreeMonoid.lift.{u2, u1} α M _inst_1) f) l) (List.prod.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (Monoid.toOne.{u1} M _inst_1) (List.map.{u2, u1} α M f (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : FreeMonoid.{u2} α) => List.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.toList.{u2} α) l)))
 Case conversion may be inaccurate. Consider using '#align free_monoid.lift_apply FreeMonoid.lift_applyₓ'. -/
 @[to_additive]
 theorem lift_apply (f : α → M) (l : FreeMonoid α) : lift f l = (l.toList.map f).Prod :=
@@ -394,7 +394,7 @@ theorem lift_apply (f : α → M) (l : FreeMonoid α) : lift f l = (l.toList.map
 lean 3 declaration is
   forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] (f : α -> M), Eq.{max (succ u1) (succ u2)} (α -> M) (Function.comp.{succ u1, succ u1, succ u2} α (FreeMonoid.{u1} α) M (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) => (FreeMonoid.{u1} α) -> M) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ u2) (succ u1)) (max (succ u2) (succ u1)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) => (α -> M) -> (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (FreeMonoid.lift.{u1, u2} α M _inst_1) f)) (FreeMonoid.of.{u1} α)) f
 but is expected to have type
-  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (f : α -> M), Eq.{max (succ u2) (succ u1)} (α -> M) (Function.comp.{succ u2, succ u2, succ u1} α (FreeMonoid.{u2} α) M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) (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 u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (FreeMonoid.lift.{u2, u1} α M _inst_1) f)) (FreeMonoid.of.{u2} α)) f
+  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (f : α -> M), Eq.{max (succ u2) (succ u1)} (α -> M) (Function.comp.{succ u2, succ u2, succ u1} α (FreeMonoid.{u2} α) M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) (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 u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (FreeMonoid.lift.{u2, u1} α M _inst_1) f)) (FreeMonoid.of.{u2} α)) f
 Case conversion may be inaccurate. Consider using '#align free_monoid.lift_comp_of FreeMonoid.lift_comp_ofₓ'. -/
 @[to_additive]
 theorem lift_comp_of (f : α → M) : lift f ∘ of = f :=
@@ -406,7 +406,7 @@ theorem lift_comp_of (f : α → M) : lift f ∘ of = f :=
 lean 3 declaration is
   forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] (f : α -> M) (x : α), Eq.{succ u2} M (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) => (FreeMonoid.{u1} α) -> M) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ u2) (succ u1)) (max (succ u2) (succ u1)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) => (α -> M) -> (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (FreeMonoid.lift.{u1, u2} α M _inst_1) f) (FreeMonoid.of.{u1} α x)) (f x)
 but is expected to have type
-  forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] (f : α -> M) (x : α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u1} α) => M) (FreeMonoid.of.{u1} α x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f) (FreeMonoid.{u1} α) (fun (_x : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u1} α) => M) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f) (FreeMonoid.{u1} α) M (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f) (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1) (MonoidHom.monoidHomClass.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)))) (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 u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (FreeMonoid.lift.{u1, u2} α M _inst_1) f) (FreeMonoid.of.{u1} α x)) (f x)
+  forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] (f : α -> M) (x : α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u1} α) => M) (FreeMonoid.of.{u1} α x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f) (FreeMonoid.{u1} α) (fun (_x : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u1} α) => M) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f) (FreeMonoid.{u1} α) M (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f) (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1) (MonoidHom.monoidHomClass.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)))) (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 u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (FreeMonoid.lift.{u1, u2} α M _inst_1) f) (FreeMonoid.of.{u1} α x)) (f x)
 Case conversion may be inaccurate. Consider using '#align free_monoid.lift_eval_of FreeMonoid.lift_eval_ofₓ'. -/
 @[simp, to_additive]
 theorem lift_eval_of (f : α → M) (x : α) : lift f (of x) = f x :=
@@ -418,7 +418,7 @@ theorem lift_eval_of (f : α → M) (x : α) : lift f (of x) = f x :=
 lean 3 declaration is
   forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] (f : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)), Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ u2) (succ u1)) (max (succ u2) (succ u1)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) => (α -> M) -> (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (FreeMonoid.lift.{u1, u2} α M _inst_1) (Function.comp.{succ u1, succ u1, succ u2} α (FreeMonoid.{u1} α) M (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) => (FreeMonoid.{u1} α) -> M) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f) (FreeMonoid.of.{u1} α))) f
 but is expected to have type
-  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (f : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (Function.comp.{succ u2, succ u2, succ u1} α (FreeMonoid.{u2} α) M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (a : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u2} α) => M) a) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) f) (FreeMonoid.of.{u2} α))) (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 u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (FreeMonoid.lift.{u2, u1} α M _inst_1) (Function.comp.{succ u2, succ u2, succ u1} α (FreeMonoid.{u2} α) M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) f) (FreeMonoid.of.{u2} α))) f
+  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (f : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (Function.comp.{succ u2, succ u2, succ u1} α (FreeMonoid.{u2} α) M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (a : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u2} α) => M) a) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) f) (FreeMonoid.of.{u2} α))) (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 u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (FreeMonoid.lift.{u2, u1} α M _inst_1) (Function.comp.{succ u2, succ u2, succ u1} α (FreeMonoid.{u2} α) M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) f) (FreeMonoid.of.{u2} α))) f
 Case conversion may be inaccurate. Consider using '#align free_monoid.lift_restrict FreeMonoid.lift_restrictₓ'. -/
 @[simp, to_additive]
 theorem lift_restrict (f : FreeMonoid α →* M) : lift (f ∘ of) = f :=
@@ -430,7 +430,7 @@ theorem lift_restrict (f : FreeMonoid α →* M) : lift (f ∘ of) = f :=
 lean 3 declaration is
   forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] {N : Type.{u3}} [_inst_2 : Monoid.{u3} N] (g : MonoidHom.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) (f : α -> M), Eq.{max (succ u3) (succ u1)} (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2)) (MonoidHom.comp.{u1, u2, u3} (FreeMonoid.{u1} α) M N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2) g (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ u2) (succ u1)) (max (succ u2) (succ u1)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) => (α -> M) -> (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (FreeMonoid.lift.{u1, u2} α M _inst_1) f)) (coeFn.{max 1 (max (max (succ u1) (succ u3)) (succ u3) (succ u1)) (max (succ u3) (succ u1)) (succ u1) (succ u3), max (max (succ u1) (succ u3)) (succ u3) (succ u1)} (Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> N) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2))) (fun (_x : Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> N) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2))) => (α -> N) -> (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2))) (Equiv.hasCoeToFun.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> N) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2))) (FreeMonoid.lift.{u1, u3} α N _inst_2) (Function.comp.{succ u1, succ u2, succ u3} α M N (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) (fun (_x : MonoidHom.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) => M -> N) (MonoidHom.hasCoeToFun.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) g) f))
 but is expected to have type
-  forall {α : Type.{u1}} {M : Type.{u3}} [_inst_1 : Monoid.{u3} M] {N : Type.{u2}} [_inst_2 : Monoid.{u2} N] (g : MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) (f : α -> M), Eq.{max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHom.comp.{u1, u3, u2} (FreeMonoid.{u1} α) M N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) g (FunLike.coe.{max (succ u3) (succ u1), max (succ u3) (succ u1), max (succ u3) (succ u1)} (Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (FreeMonoid.lift.{u1, u3} α M _inst_1) f)) (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 u2) (succ u1)} (α -> N) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2))) (α -> N) (fun (_x : α -> N) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (α -> N) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2))) (FreeMonoid.lift.{u1, u2} α N _inst_2) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f))
+  forall {α : Type.{u1}} {M : Type.{u3}} [_inst_1 : Monoid.{u3} M] {N : Type.{u2}} [_inst_2 : Monoid.{u2} N] (g : MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) (f : α -> M), Eq.{max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHom.comp.{u1, u3, u2} (FreeMonoid.{u1} α) M N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) g (FunLike.coe.{max (succ u3) (succ u1), max (succ u3) (succ u1), max (succ u3) (succ u1)} (Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (FreeMonoid.lift.{u1, u3} α M _inst_1) f)) (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 u2) (succ u1)} (α -> N) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2))) (α -> N) (fun (_x : α -> N) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (α -> N) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2))) (FreeMonoid.lift.{u1, u2} α N _inst_2) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f))
 Case conversion may be inaccurate. Consider using '#align free_monoid.comp_lift FreeMonoid.comp_liftₓ'. -/
 @[to_additive]
 theorem comp_lift (g : M →* N) (f : α → M) : g.comp (lift f) = lift (g ∘ f) :=
@@ -444,7 +444,7 @@ theorem comp_lift (g : M →* N) (f : α → M) : g.comp (lift f) = lift (g ∘
 lean 3 declaration is
   forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] {N : Type.{u3}} [_inst_2 : Monoid.{u3} N] (g : MonoidHom.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) (f : α -> M) (x : FreeMonoid.{u1} α), Eq.{succ u3} N (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) (fun (_x : MonoidHom.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) => M -> N) (MonoidHom.hasCoeToFun.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) g (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) => (FreeMonoid.{u1} α) -> M) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ u2) (succ u1)) (max (succ u2) (succ u1)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) => (α -> M) -> (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (FreeMonoid.lift.{u1, u2} α M _inst_1) f) x)) (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2)) (fun (_x : MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2)) => (FreeMonoid.{u1} α) -> N) (MonoidHom.hasCoeToFun.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2)) (coeFn.{max 1 (max (max (succ u1) (succ u3)) (succ u3) (succ u1)) (max (succ u3) (succ u1)) (succ u1) (succ u3), max (max (succ u1) (succ u3)) (succ u3) (succ u1)} (Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> N) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2))) (fun (_x : Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> N) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2))) => (α -> N) -> (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2))) (Equiv.hasCoeToFun.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> N) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2))) (FreeMonoid.lift.{u1, u3} α N _inst_2) (Function.comp.{succ u1, succ u2, succ u3} α M N (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) (fun (_x : MonoidHom.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) => M -> N) (MonoidHom.hasCoeToFun.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) g) f)) x)
 but is expected to have type
-  forall {α : Type.{u1}} {M : Type.{u3}} [_inst_1 : Monoid.{u3} M] {N : Type.{u2}} [_inst_2 : Monoid.{u2} N] (g : MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) (f : α -> M) (x : FreeMonoid.{u1} α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) (fun (a : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u1} α) => M) a) (MulHomClass.toFunLike.{max u1 u3, u1, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) M (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u1 u3, u1, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1) (MonoidHom.monoidHomClass.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)))) (FunLike.coe.{max (succ u3) (succ u1), max (succ u3) (succ u1), max (succ u3) (succ u1)} (Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (α -> M) (fun (a : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) a) (Equiv.instFunLikeEquiv.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (FreeMonoid.lift.{u1, u3} α M _inst_1) f) x)) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) (fun (_x : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u1} α) => M) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) M (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u1 u3, u1, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1) (MonoidHom.monoidHomClass.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)))) (FunLike.coe.{max (succ u3) (succ u1), max (succ u3) (succ u1), max (succ u3) (succ u1)} (Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (FreeMonoid.lift.{u1, u3} α M _inst_1) f) x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f)) (FreeMonoid.{u1} α) (fun (_x : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u1} α) => N) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f)) (FreeMonoid.{u1} α) N (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f)) (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)))) (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 u2) (succ u1)} (α -> N) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2))) (α -> N) (fun (_x : α -> N) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (α -> N) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2))) (FreeMonoid.lift.{u1, u2} α N _inst_2) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f)) x)
+  forall {α : Type.{u1}} {M : Type.{u3}} [_inst_1 : Monoid.{u3} M] {N : Type.{u2}} [_inst_2 : Monoid.{u2} N] (g : MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) (f : α -> M) (x : FreeMonoid.{u1} α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) (fun (a : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u1} α) => M) a) (MulHomClass.toFunLike.{max u1 u3, u1, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) M (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u1 u3, u1, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1) (MonoidHom.monoidHomClass.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)))) (FunLike.coe.{max (succ u3) (succ u1), max (succ u3) (succ u1), max (succ u3) (succ u1)} (Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (α -> M) (fun (a : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) a) (Equiv.instFunLikeEquiv.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (FreeMonoid.lift.{u1, u3} α M _inst_1) f) x)) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) (fun (_x : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u1} α) => M) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) M (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u1 u3, u1, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1) (MonoidHom.monoidHomClass.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)))) (FunLike.coe.{max (succ u3) (succ u1), max (succ u3) (succ u1), max (succ u3) (succ u1)} (Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (FreeMonoid.lift.{u1, u3} α M _inst_1) f) x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f)) (FreeMonoid.{u1} α) (fun (_x : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u1} α) => N) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f)) (FreeMonoid.{u1} α) N (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f)) (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)))) (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 u2) (succ u1)} (α -> N) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2))) (α -> N) (fun (_x : α -> N) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (α -> N) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2))) (FreeMonoid.lift.{u1, u2} α N _inst_2) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f)) x)
 Case conversion may be inaccurate. Consider using '#align free_monoid.hom_map_lift FreeMonoid.hom_map_liftₓ'. -/
 @[to_additive]
 theorem hom_map_lift (g : M →* N) (f : α → M) (x : FreeMonoid α) : g (lift f x) = lift (g ∘ f) x :=
@@ -472,7 +472,7 @@ def mkMulAction (f : α → β → β) : MulAction (FreeMonoid α) β
 lean 3 declaration is
   forall {α : Type.{u1}} {β : Type.{u2}} (f : α -> β -> β) (l : FreeMonoid.{u1} α) (b : β), Eq.{succ u2} β (SMul.smul.{u1, u2} (FreeMonoid.{u1} α) β (MulAction.toHasSmul.{u1, u2} (FreeMonoid.{u1} α) β (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α))) (FreeMonoid.mkMulAction.{u1, u2} α β f)) l b) (List.foldr.{u1, u2} α β f b (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (FreeMonoid.{u1} α) (List.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} (FreeMonoid.{u1} α) (List.{u1} α)) => (FreeMonoid.{u1} α) -> (List.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} (FreeMonoid.{u1} α) (List.{u1} α)) (FreeMonoid.toList.{u1} α) l))
 but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} (f : α -> β -> β) (l : FreeMonoid.{u2} α) (b : β), Eq.{succ u1} β (HSMul.hSMul.{u2, u1, u1} (FreeMonoid.{u2} α) β β (instHSMul.{u2, u1} (FreeMonoid.{u2} α) β (MulAction.toSMul.{u2, u1} (FreeMonoid.{u2} α) β (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))) (FreeMonoid.mkMulAction.{u2, u1} α β f))) l b) (List.foldr.{u2, u1} α β f b (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : FreeMonoid.{u2} α) => List.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.toList.{u2} α) l))
+  forall {α : Type.{u2}} {β : Type.{u1}} (f : α -> β -> β) (l : FreeMonoid.{u2} α) (b : β), Eq.{succ u1} β (HSMul.hSMul.{u2, u1, u1} (FreeMonoid.{u2} α) β β (instHSMul.{u2, u1} (FreeMonoid.{u2} α) β (MulAction.toSMul.{u2, u1} (FreeMonoid.{u2} α) β (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))) (FreeMonoid.mkMulAction.{u2, u1} α β f))) l b) (List.foldr.{u2, u1} α β f b (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : FreeMonoid.{u2} α) => List.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.toList.{u2} α) l))
 Case conversion may be inaccurate. Consider using '#align free_monoid.smul_def FreeMonoid.smul_defₓ'. -/
 @[to_additive]
 theorem smul_def (f : α → β → β) (l : FreeMonoid α) (b : β) :
@@ -486,7 +486,7 @@ theorem smul_def (f : α → β → β) (l : FreeMonoid α) (b : β) :
 lean 3 declaration is
   forall {α : Type.{u1}} {β : Type.{u2}} (f : α -> β -> β) (l : List.{u1} α) (b : β), Eq.{succ u2} β (SMul.smul.{u1, u2} (FreeMonoid.{u1} α) β (MulAction.toHasSmul.{u1, u2} (FreeMonoid.{u1} α) β (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α))) (FreeMonoid.mkMulAction.{u1, u2} α β f)) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (List.{u1} α) (FreeMonoid.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} (List.{u1} α) (FreeMonoid.{u1} α)) => (List.{u1} α) -> (FreeMonoid.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} (List.{u1} α) (FreeMonoid.{u1} α)) (FreeMonoid.ofList.{u1} α) l) b) (List.foldr.{u1, u2} α β f b l)
 but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} (f : α -> β -> β) (l : List.{u2} α) (b : β), Eq.{succ u1} β (HSMul.hSMul.{u2, u1, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : List.{u2} α) => FreeMonoid.{u2} α) l) β β (instHSMul.{u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : List.{u2} α) => FreeMonoid.{u2} α) l) β (MulAction.toSMul.{u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : List.{u2} α) => FreeMonoid.{u2} α) l) β (RightCancelMonoid.toMonoid.{u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : List.{u2} α) => FreeMonoid.{u2} α) l) (CancelMonoid.toRightCancelMonoid.{u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : List.{u2} α) => FreeMonoid.{u2} α) l) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))) (FreeMonoid.mkMulAction.{u2, u1} α β f))) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (List.{u2} α) (FreeMonoid.{u2} α)) (List.{u2} α) (fun (_x : List.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : List.{u2} α) => FreeMonoid.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (List.{u2} α) (FreeMonoid.{u2} α)) (FreeMonoid.ofList.{u2} α) l) b) (List.foldr.{u2, u1} α β f b l)
+  forall {α : Type.{u2}} {β : Type.{u1}} (f : α -> β -> β) (l : List.{u2} α) (b : β), Eq.{succ u1} β (HSMul.hSMul.{u2, u1, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : List.{u2} α) => FreeMonoid.{u2} α) l) β β (instHSMul.{u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : List.{u2} α) => FreeMonoid.{u2} α) l) β (MulAction.toSMul.{u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : List.{u2} α) => FreeMonoid.{u2} α) l) β (RightCancelMonoid.toMonoid.{u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : List.{u2} α) => FreeMonoid.{u2} α) l) (CancelMonoid.toRightCancelMonoid.{u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : List.{u2} α) => FreeMonoid.{u2} α) l) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))) (FreeMonoid.mkMulAction.{u2, u1} α β f))) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (List.{u2} α) (FreeMonoid.{u2} α)) (List.{u2} α) (fun (_x : List.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : List.{u2} α) => FreeMonoid.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (List.{u2} α) (FreeMonoid.{u2} α)) (FreeMonoid.ofList.{u2} α) l) b) (List.foldr.{u2, u1} α β f b l)
 Case conversion may be inaccurate. Consider using '#align free_monoid.of_list_smul FreeMonoid.ofList_smulₓ'. -/
 @[to_additive]
 theorem ofList_smul (f : α → β → β) (l : List α) (b : β) :
@@ -529,7 +529,7 @@ def map (f : α → β) : FreeMonoid α →* FreeMonoid β
 lean 3 declaration is
   forall {α : Type.{u1}} {β : Type.{u2}} (f : α -> β) (x : α), Eq.{succ u2} (FreeMonoid.{u2} β) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) => (FreeMonoid.{u1} α) -> (FreeMonoid.{u2} β)) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) (FreeMonoid.map.{u1, u2} α β f) (FreeMonoid.of.{u1} α x)) (FreeMonoid.of.{u2} β (f x))
 but is expected to have type
-  forall {α : Type.{u1}} {β : Type.{u2}} (f : α -> β) (x : α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u1} α) => FreeMonoid.{u2} β) (FreeMonoid.of.{u1} α x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))) (FreeMonoid.{u1} α) (fun (_x : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u1} α) => FreeMonoid.{u2} β) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))) (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))) (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β)))) (MonoidHom.monoidHomClass.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))))) (FreeMonoid.map.{u1, u2} α β f) (FreeMonoid.of.{u1} α x)) (FreeMonoid.of.{u2} β (f x))
+  forall {α : Type.{u1}} {β : Type.{u2}} (f : α -> β) (x : α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u1} α) => FreeMonoid.{u2} β) (FreeMonoid.of.{u1} α x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))) (FreeMonoid.{u1} α) (fun (_x : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u1} α) => FreeMonoid.{u2} β) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))) (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))) (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β)))) (MonoidHom.monoidHomClass.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))))) (FreeMonoid.map.{u1, u2} α β f) (FreeMonoid.of.{u1} α x)) (FreeMonoid.of.{u2} β (f x))
 Case conversion may be inaccurate. Consider using '#align free_monoid.map_of FreeMonoid.map_ofₓ'. -/
 @[simp, to_additive]
 theorem map_of (f : α → β) (x : α) : map f (of x) = of (f x) :=
@@ -541,7 +541,7 @@ theorem map_of (f : α → β) (x : α) : map f (of x) = of (f x) :=
 lean 3 declaration is
   forall {α : Type.{u1}} {β : Type.{u2}} (f : α -> β) (xs : FreeMonoid.{u1} α), Eq.{succ u2} (List.{u2} β) (coeFn.{succ u2, succ u2} (Equiv.{succ u2, succ u2} (FreeMonoid.{u2} β) (List.{u2} β)) (fun (_x : Equiv.{succ u2, succ u2} (FreeMonoid.{u2} β) (List.{u2} β)) => (FreeMonoid.{u2} β) -> (List.{u2} β)) (Equiv.hasCoeToFun.{succ u2, succ u2} (FreeMonoid.{u2} β) (List.{u2} β)) (FreeMonoid.toList.{u2} β) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) => (FreeMonoid.{u1} α) -> (FreeMonoid.{u2} β)) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) (FreeMonoid.map.{u1, u2} α β f) xs)) (List.map.{u1, u2} α β f (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (FreeMonoid.{u1} α) (List.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} (FreeMonoid.{u1} α) (List.{u1} α)) => (FreeMonoid.{u1} α) -> (List.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} (FreeMonoid.{u1} α) (List.{u1} α)) (FreeMonoid.toList.{u1} α) xs))
 but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} (f : α -> β) (xs : FreeMonoid.{u2} α), Eq.{succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : FreeMonoid.{u1} β) => List.{u1} β) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (fun (a : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u2} α) => FreeMonoid.{u1} β) a) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))))) (FreeMonoid.map.{u2, u1} α β f) xs)) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} (FreeMonoid.{u1} β) (List.{u1} β)) (FreeMonoid.{u1} β) (fun (_x : FreeMonoid.{u1} β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : FreeMonoid.{u1} β) => List.{u1} β) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} (FreeMonoid.{u1} β) (List.{u1} β)) (FreeMonoid.toList.{u1} β) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u2} α) => FreeMonoid.{u1} β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))))) (FreeMonoid.map.{u2, u1} α β f) xs)) (List.map.{u2, u1} α β f (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : FreeMonoid.{u2} α) => List.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.toList.{u2} α) xs))
+  forall {α : Type.{u2}} {β : Type.{u1}} (f : α -> β) (xs : FreeMonoid.{u2} α), Eq.{succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : FreeMonoid.{u1} β) => List.{u1} β) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (fun (a : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u2} α) => FreeMonoid.{u1} β) a) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))))) (FreeMonoid.map.{u2, u1} α β f) xs)) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} (FreeMonoid.{u1} β) (List.{u1} β)) (FreeMonoid.{u1} β) (fun (_x : FreeMonoid.{u1} β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : FreeMonoid.{u1} β) => List.{u1} β) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} (FreeMonoid.{u1} β) (List.{u1} β)) (FreeMonoid.toList.{u1} β) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u2} α) => FreeMonoid.{u1} β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))))) (FreeMonoid.map.{u2, u1} α β f) xs)) (List.map.{u2, u1} α β f (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : FreeMonoid.{u2} α) => List.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.toList.{u2} α) xs))
 Case conversion may be inaccurate. Consider using '#align free_monoid.to_list_map FreeMonoid.toList_mapₓ'. -/
 @[to_additive]
 theorem toList_map (f : α → β) (xs : FreeMonoid α) : (map f xs).toList = xs.toList.map f :=
@@ -553,7 +553,7 @@ theorem toList_map (f : α → β) (xs : FreeMonoid α) : (map f xs).toList = xs
 lean 3 declaration is
   forall {α : Type.{u1}} {β : Type.{u2}} (f : α -> β) (xs : List.{u1} α), Eq.{succ u2} (FreeMonoid.{u2} β) (coeFn.{succ u2, succ u2} (Equiv.{succ u2, succ u2} (List.{u2} β) (FreeMonoid.{u2} β)) (fun (_x : Equiv.{succ u2, succ u2} (List.{u2} β) (FreeMonoid.{u2} β)) => (List.{u2} β) -> (FreeMonoid.{u2} β)) (Equiv.hasCoeToFun.{succ u2, succ u2} (List.{u2} β) (FreeMonoid.{u2} β)) (FreeMonoid.ofList.{u2} β) (List.map.{u1, u2} α β f xs)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) => (FreeMonoid.{u1} α) -> (FreeMonoid.{u2} β)) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) (FreeMonoid.map.{u1, u2} α β f) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (List.{u1} α) (FreeMonoid.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} (List.{u1} α) (FreeMonoid.{u1} α)) => (List.{u1} α) -> (FreeMonoid.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} (List.{u1} α) (FreeMonoid.{u1} α)) (FreeMonoid.ofList.{u1} α) xs))
 but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} (f : α -> β) (xs : List.{u2} α), Eq.{succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : List.{u1} β) => FreeMonoid.{u1} β) (List.map.{u2, u1} α β f xs)) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} (List.{u1} β) (FreeMonoid.{u1} β)) (List.{u1} β) (fun (_x : List.{u1} β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : List.{u1} β) => FreeMonoid.{u1} β) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} (List.{u1} β) (FreeMonoid.{u1} β)) (FreeMonoid.ofList.{u1} β) (List.map.{u2, u1} α β f xs)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u2} α) => FreeMonoid.{u1} β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))))) (FreeMonoid.map.{u2, u1} α β f) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (List.{u2} α) (FreeMonoid.{u2} α)) (List.{u2} α) (fun (_x : List.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : List.{u2} α) => FreeMonoid.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (List.{u2} α) (FreeMonoid.{u2} α)) (FreeMonoid.ofList.{u2} α) xs))
+  forall {α : Type.{u2}} {β : Type.{u1}} (f : α -> β) (xs : List.{u2} α), Eq.{succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : List.{u1} β) => FreeMonoid.{u1} β) (List.map.{u2, u1} α β f xs)) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} (List.{u1} β) (FreeMonoid.{u1} β)) (List.{u1} β) (fun (_x : List.{u1} β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : List.{u1} β) => FreeMonoid.{u1} β) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} (List.{u1} β) (FreeMonoid.{u1} β)) (FreeMonoid.ofList.{u1} β) (List.map.{u2, u1} α β f xs)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : FreeMonoid.{u2} α) => FreeMonoid.{u1} β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))))) (FreeMonoid.map.{u2, u1} α β f) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (List.{u2} α) (FreeMonoid.{u2} α)) (List.{u2} α) (fun (_x : List.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : List.{u2} α) => FreeMonoid.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (List.{u2} α) (FreeMonoid.{u2} α)) (FreeMonoid.ofList.{u2} α) xs))
 Case conversion may be inaccurate. Consider using '#align free_monoid.of_list_map FreeMonoid.ofList_mapₓ'. -/
 @[to_additive]
 theorem ofList_map (f : α → β) (xs : List α) : ofList (xs.map f) = map f (ofList xs) :=
@@ -565,7 +565,7 @@ theorem ofList_map (f : α → β) (xs : List α) : ofList (xs.map f) = map f (o
 lean 3 declaration is
   forall {α : Type.{u1}} {β : Type.{u2}} (f : α -> β), Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ u2) (succ u1)) (max (succ u2) (succ u1)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> (FreeMonoid.{u2} β)) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β)))))) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> (FreeMonoid.{u2} β)) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β)))))) => (α -> (FreeMonoid.{u2} β)) -> (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β)))))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> (FreeMonoid.{u2} β)) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β)))))) (FreeMonoid.lift.{u1, u2} α (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β)))) (fun (x : α) => FreeMonoid.of.{u2} β (f x))) (FreeMonoid.map.{u1, u2} α β f)
 but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} (f : α -> β), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> (FreeMonoid.{u1} β)) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (fun (x : α) => FreeMonoid.of.{u1} β (f x))) (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 u2)} (α -> (FreeMonoid.{u1} β)) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))))) (α -> (FreeMonoid.{u1} β)) (fun (_x : α -> (FreeMonoid.{u1} β)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> (FreeMonoid.{u1} β)) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (α -> (FreeMonoid.{u1} β)) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))))) (FreeMonoid.lift.{u2, u1} α (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))) (fun (x : α) => FreeMonoid.of.{u1} β (f x))) (FreeMonoid.map.{u2, u1} α β f)
+  forall {α : Type.{u2}} {β : Type.{u1}} (f : α -> β), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> (FreeMonoid.{u1} β)) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (fun (x : α) => FreeMonoid.of.{u1} β (f x))) (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 u2)} (α -> (FreeMonoid.{u1} β)) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))))) (α -> (FreeMonoid.{u1} β)) (fun (_x : α -> (FreeMonoid.{u1} β)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.812 : α -> (FreeMonoid.{u1} β)) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (α -> (FreeMonoid.{u1} β)) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))))) (FreeMonoid.lift.{u2, u1} α (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))) (fun (x : α) => FreeMonoid.of.{u1} β (f x))) (FreeMonoid.map.{u2, u1} α β f)
 Case conversion may be inaccurate. Consider using '#align free_monoid.lift_of_comp_eq_map FreeMonoid.lift_of_comp_eq_mapₓ'. -/
 @[to_additive]
 theorem lift_of_comp_eq_map (f : α → β) : (lift fun x => of (f x)) = map f :=
Diff
@@ -311,7 +311,7 @@ theorem casesOn_of_mul {C : FreeMonoid α → Sort _} (x : α) (xs : FreeMonoid
 lean 3 declaration is
   forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] {{f : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)}} {{g : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)}}, (forall (x : α), Eq.{succ u2} M (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) => (FreeMonoid.{u1} α) -> M) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f (FreeMonoid.of.{u1} α x)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) => (FreeMonoid.{u1} α) -> M) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) g (FreeMonoid.of.{u1} α x))) -> (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f g)
 but is expected to have type
-  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] {{f : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)}} {{g : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)}}, (forall (x : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u2} α) => M) (FreeMonoid.of.{u2} α x)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) f (FreeMonoid.of.{u2} α x)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) g (FreeMonoid.of.{u2} α x))) -> (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f g)
+  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] {{f : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)}} {{g : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)}}, (forall (x : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u2} α) => M) (FreeMonoid.of.{u2} α x)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) f (FreeMonoid.of.{u2} α x)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) g (FreeMonoid.of.{u2} α x))) -> (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f g)
 Case conversion may be inaccurate. Consider using '#align free_monoid.hom_eq FreeMonoid.hom_eqₓ'. -/
 @[ext, to_additive]
 theorem hom_eq ⦃f g : FreeMonoid α →* M⦄ (h : ∀ x, f (of x) = g (of x)) : f = g :=
@@ -370,7 +370,7 @@ def lift : (α → M) ≃ (FreeMonoid α →* M)
 lean 3 declaration is
   forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] (f : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)), Eq.{max (succ u1) (succ u2)} (α -> M) (coeFn.{max 1 (max (max (succ u2) (succ u1)) (succ u1) (succ u2)) (max (succ u1) (succ u2)) (succ u2) (succ u1), max (max (succ u2) (succ u1)) (succ u1) (succ u2)} (Equiv.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (α -> M)) (fun (_x : Equiv.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (α -> M)) => (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) -> α -> M) (Equiv.hasCoeToFun.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (α -> M)) (Equiv.symm.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (FreeMonoid.lift.{u1, u2} α M _inst_1)) f) (Function.comp.{succ u1, succ u1, succ u2} α (FreeMonoid.{u1} α) M (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) => (FreeMonoid.{u1} α) -> M) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f) (FreeMonoid.of.{u1} α))
 but is expected to have type
-  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (f : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) => α -> M) f) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (α -> M)) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (fun (_x : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) => α -> M) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (α -> M)) (Equiv.symm.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.lift.{u2, u1} α M _inst_1)) f) (Function.comp.{succ u2, succ u2, succ u1} α (FreeMonoid.{u2} α) M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) f) (FreeMonoid.of.{u2} α))
+  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (f : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) => α -> M) f) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (α -> M)) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (fun (_x : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) => α -> M) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (α -> M)) (Equiv.symm.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.lift.{u2, u1} α M _inst_1)) f) (Function.comp.{succ u2, succ u2, succ u1} α (FreeMonoid.{u2} α) M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) f) (FreeMonoid.of.{u2} α))
 Case conversion may be inaccurate. Consider using '#align free_monoid.lift_symm_apply FreeMonoid.lift_symm_applyₓ'. -/
 @[simp, to_additive]
 theorem lift_symm_apply (f : FreeMonoid α →* M) : lift.symm f = f ∘ of :=
@@ -382,7 +382,7 @@ theorem lift_symm_apply (f : FreeMonoid α →* M) : lift.symm f = f ∘ of :=
 lean 3 declaration is
   forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] (f : α -> M) (l : FreeMonoid.{u1} α), Eq.{succ u2} M (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) => (FreeMonoid.{u1} α) -> M) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ u2) (succ u1)) (max (succ u2) (succ u1)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) => (α -> M) -> (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (FreeMonoid.lift.{u1, u2} α M _inst_1) f) l) (List.prod.{u2} M (MulOneClass.toHasMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toHasOne.{u2} M (Monoid.toMulOneClass.{u2} M _inst_1)) (List.map.{u1, u2} α M f (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (FreeMonoid.{u1} α) (List.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} (FreeMonoid.{u1} α) (List.{u1} α)) => (FreeMonoid.{u1} α) -> (List.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} (FreeMonoid.{u1} α) (List.{u1} α)) (FreeMonoid.toList.{u1} α) l)))
 but is expected to have type
-  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (f : α -> M) (l : FreeMonoid.{u2} α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u2} α) => M) l) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) (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 u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (FreeMonoid.lift.{u2, u1} α M _inst_1) f) l) (List.prod.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (Monoid.toOne.{u1} M _inst_1) (List.map.{u2, u1} α M f (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : FreeMonoid.{u2} α) => List.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.toList.{u2} α) l)))
+  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (f : α -> M) (l : FreeMonoid.{u2} α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u2} α) => M) l) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) (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 u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (FreeMonoid.lift.{u2, u1} α M _inst_1) f) l) (List.prod.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (Monoid.toOne.{u1} M _inst_1) (List.map.{u2, u1} α M f (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : FreeMonoid.{u2} α) => List.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.toList.{u2} α) l)))
 Case conversion may be inaccurate. Consider using '#align free_monoid.lift_apply FreeMonoid.lift_applyₓ'. -/
 @[to_additive]
 theorem lift_apply (f : α → M) (l : FreeMonoid α) : lift f l = (l.toList.map f).Prod :=
@@ -394,7 +394,7 @@ theorem lift_apply (f : α → M) (l : FreeMonoid α) : lift f l = (l.toList.map
 lean 3 declaration is
   forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] (f : α -> M), Eq.{max (succ u1) (succ u2)} (α -> M) (Function.comp.{succ u1, succ u1, succ u2} α (FreeMonoid.{u1} α) M (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) => (FreeMonoid.{u1} α) -> M) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ u2) (succ u1)) (max (succ u2) (succ u1)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) => (α -> M) -> (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (FreeMonoid.lift.{u1, u2} α M _inst_1) f)) (FreeMonoid.of.{u1} α)) f
 but is expected to have type
-  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (f : α -> M), Eq.{max (succ u2) (succ u1)} (α -> M) (Function.comp.{succ u2, succ u2, succ u1} α (FreeMonoid.{u2} α) M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) (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 u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (FreeMonoid.lift.{u2, u1} α M _inst_1) f)) (FreeMonoid.of.{u2} α)) f
+  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (f : α -> M), Eq.{max (succ u2) (succ u1)} (α -> M) (Function.comp.{succ u2, succ u2, succ u1} α (FreeMonoid.{u2} α) M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) (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 u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (FreeMonoid.lift.{u2, u1} α M _inst_1) f)) (FreeMonoid.of.{u2} α)) f
 Case conversion may be inaccurate. Consider using '#align free_monoid.lift_comp_of FreeMonoid.lift_comp_ofₓ'. -/
 @[to_additive]
 theorem lift_comp_of (f : α → M) : lift f ∘ of = f :=
@@ -406,7 +406,7 @@ theorem lift_comp_of (f : α → M) : lift f ∘ of = f :=
 lean 3 declaration is
   forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] (f : α -> M) (x : α), Eq.{succ u2} M (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) => (FreeMonoid.{u1} α) -> M) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ u2) (succ u1)) (max (succ u2) (succ u1)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) => (α -> M) -> (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (FreeMonoid.lift.{u1, u2} α M _inst_1) f) (FreeMonoid.of.{u1} α x)) (f x)
 but is expected to have type
-  forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] (f : α -> M) (x : α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u1} α) => M) (FreeMonoid.of.{u1} α x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f) (FreeMonoid.{u1} α) (fun (_x : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u1} α) => M) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f) (FreeMonoid.{u1} α) M (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f) (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1) (MonoidHom.monoidHomClass.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)))) (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 u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (FreeMonoid.lift.{u1, u2} α M _inst_1) f) (FreeMonoid.of.{u1} α x)) (f x)
+  forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] (f : α -> M) (x : α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u1} α) => M) (FreeMonoid.of.{u1} α x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f) (FreeMonoid.{u1} α) (fun (_x : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u1} α) => M) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f) (FreeMonoid.{u1} α) M (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f) (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1) (MonoidHom.monoidHomClass.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)))) (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 u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (FreeMonoid.lift.{u1, u2} α M _inst_1) f) (FreeMonoid.of.{u1} α x)) (f x)
 Case conversion may be inaccurate. Consider using '#align free_monoid.lift_eval_of FreeMonoid.lift_eval_ofₓ'. -/
 @[simp, to_additive]
 theorem lift_eval_of (f : α → M) (x : α) : lift f (of x) = f x :=
@@ -418,7 +418,7 @@ theorem lift_eval_of (f : α → M) (x : α) : lift f (of x) = f x :=
 lean 3 declaration is
   forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] (f : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)), Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ u2) (succ u1)) (max (succ u2) (succ u1)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) => (α -> M) -> (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (FreeMonoid.lift.{u1, u2} α M _inst_1) (Function.comp.{succ u1, succ u1, succ u2} α (FreeMonoid.{u1} α) M (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) => (FreeMonoid.{u1} α) -> M) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f) (FreeMonoid.of.{u1} α))) f
 but is expected to have type
-  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (f : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (Function.comp.{succ u2, succ u2, succ u1} α (FreeMonoid.{u2} α) M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (a : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u2} α) => M) a) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) f) (FreeMonoid.of.{u2} α))) (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 u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (FreeMonoid.lift.{u2, u1} α M _inst_1) (Function.comp.{succ u2, succ u2, succ u1} α (FreeMonoid.{u2} α) M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) f) (FreeMonoid.of.{u2} α))) f
+  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (f : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (Function.comp.{succ u2, succ u2, succ u1} α (FreeMonoid.{u2} α) M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (a : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u2} α) => M) a) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) f) (FreeMonoid.of.{u2} α))) (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 u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (FreeMonoid.lift.{u2, u1} α M _inst_1) (Function.comp.{succ u2, succ u2, succ u1} α (FreeMonoid.{u2} α) M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) f) (FreeMonoid.of.{u2} α))) f
 Case conversion may be inaccurate. Consider using '#align free_monoid.lift_restrict FreeMonoid.lift_restrictₓ'. -/
 @[simp, to_additive]
 theorem lift_restrict (f : FreeMonoid α →* M) : lift (f ∘ of) = f :=
@@ -430,7 +430,7 @@ theorem lift_restrict (f : FreeMonoid α →* M) : lift (f ∘ of) = f :=
 lean 3 declaration is
   forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] {N : Type.{u3}} [_inst_2 : Monoid.{u3} N] (g : MonoidHom.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) (f : α -> M), Eq.{max (succ u3) (succ u1)} (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2)) (MonoidHom.comp.{u1, u2, u3} (FreeMonoid.{u1} α) M N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2) g (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ u2) (succ u1)) (max (succ u2) (succ u1)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) => (α -> M) -> (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (FreeMonoid.lift.{u1, u2} α M _inst_1) f)) (coeFn.{max 1 (max (max (succ u1) (succ u3)) (succ u3) (succ u1)) (max (succ u3) (succ u1)) (succ u1) (succ u3), max (max (succ u1) (succ u3)) (succ u3) (succ u1)} (Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> N) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2))) (fun (_x : Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> N) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2))) => (α -> N) -> (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2))) (Equiv.hasCoeToFun.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> N) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2))) (FreeMonoid.lift.{u1, u3} α N _inst_2) (Function.comp.{succ u1, succ u2, succ u3} α M N (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) (fun (_x : MonoidHom.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) => M -> N) (MonoidHom.hasCoeToFun.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) g) f))
 but is expected to have type
-  forall {α : Type.{u1}} {M : Type.{u3}} [_inst_1 : Monoid.{u3} M] {N : Type.{u2}} [_inst_2 : Monoid.{u2} N] (g : MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) (f : α -> M), Eq.{max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHom.comp.{u1, u3, u2} (FreeMonoid.{u1} α) M N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) g (FunLike.coe.{max (succ u3) (succ u1), max (succ u3) (succ u1), max (succ u3) (succ u1)} (Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (FreeMonoid.lift.{u1, u3} α M _inst_1) f)) (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 u2) (succ u1)} (α -> N) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2))) (α -> N) (fun (_x : α -> N) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (α -> N) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2))) (FreeMonoid.lift.{u1, u2} α N _inst_2) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f))
+  forall {α : Type.{u1}} {M : Type.{u3}} [_inst_1 : Monoid.{u3} M] {N : Type.{u2}} [_inst_2 : Monoid.{u2} N] (g : MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) (f : α -> M), Eq.{max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHom.comp.{u1, u3, u2} (FreeMonoid.{u1} α) M N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) g (FunLike.coe.{max (succ u3) (succ u1), max (succ u3) (succ u1), max (succ u3) (succ u1)} (Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (FreeMonoid.lift.{u1, u3} α M _inst_1) f)) (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 u2) (succ u1)} (α -> N) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2))) (α -> N) (fun (_x : α -> N) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (α -> N) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2))) (FreeMonoid.lift.{u1, u2} α N _inst_2) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f))
 Case conversion may be inaccurate. Consider using '#align free_monoid.comp_lift FreeMonoid.comp_liftₓ'. -/
 @[to_additive]
 theorem comp_lift (g : M →* N) (f : α → M) : g.comp (lift f) = lift (g ∘ f) :=
@@ -444,7 +444,7 @@ theorem comp_lift (g : M →* N) (f : α → M) : g.comp (lift f) = lift (g ∘
 lean 3 declaration is
   forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] {N : Type.{u3}} [_inst_2 : Monoid.{u3} N] (g : MonoidHom.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) (f : α -> M) (x : FreeMonoid.{u1} α), Eq.{succ u3} N (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) (fun (_x : MonoidHom.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) => M -> N) (MonoidHom.hasCoeToFun.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) g (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) => (FreeMonoid.{u1} α) -> M) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ u2) (succ u1)) (max (succ u2) (succ u1)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) => (α -> M) -> (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (FreeMonoid.lift.{u1, u2} α M _inst_1) f) x)) (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2)) (fun (_x : MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2)) => (FreeMonoid.{u1} α) -> N) (MonoidHom.hasCoeToFun.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2)) (coeFn.{max 1 (max (max (succ u1) (succ u3)) (succ u3) (succ u1)) (max (succ u3) (succ u1)) (succ u1) (succ u3), max (max (succ u1) (succ u3)) (succ u3) (succ u1)} (Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> N) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2))) (fun (_x : Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> N) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2))) => (α -> N) -> (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2))) (Equiv.hasCoeToFun.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> N) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2))) (FreeMonoid.lift.{u1, u3} α N _inst_2) (Function.comp.{succ u1, succ u2, succ u3} α M N (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) (fun (_x : MonoidHom.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) => M -> N) (MonoidHom.hasCoeToFun.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) g) f)) x)
 but is expected to have type
-  forall {α : Type.{u1}} {M : Type.{u3}} [_inst_1 : Monoid.{u3} M] {N : Type.{u2}} [_inst_2 : Monoid.{u2} N] (g : MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) (f : α -> M) (x : FreeMonoid.{u1} α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) (fun (a : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u1} α) => M) a) (MulHomClass.toFunLike.{max u1 u3, u1, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) M (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u1 u3, u1, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1) (MonoidHom.monoidHomClass.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)))) (FunLike.coe.{max (succ u3) (succ u1), max (succ u3) (succ u1), max (succ u3) (succ u1)} (Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (α -> M) (fun (a : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) a) (Equiv.instFunLikeEquiv.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (FreeMonoid.lift.{u1, u3} α M _inst_1) f) x)) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) (fun (_x : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u1} α) => M) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) M (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u1 u3, u1, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1) (MonoidHom.monoidHomClass.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)))) (FunLike.coe.{max (succ u3) (succ u1), max (succ u3) (succ u1), max (succ u3) (succ u1)} (Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (FreeMonoid.lift.{u1, u3} α M _inst_1) f) x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f)) (FreeMonoid.{u1} α) (fun (_x : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u1} α) => N) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f)) (FreeMonoid.{u1} α) N (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f)) (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)))) (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 u2) (succ u1)} (α -> N) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2))) (α -> N) (fun (_x : α -> N) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (α -> N) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2))) (FreeMonoid.lift.{u1, u2} α N _inst_2) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f)) x)
+  forall {α : Type.{u1}} {M : Type.{u3}} [_inst_1 : Monoid.{u3} M] {N : Type.{u2}} [_inst_2 : Monoid.{u2} N] (g : MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) (f : α -> M) (x : FreeMonoid.{u1} α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) (fun (a : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u1} α) => M) a) (MulHomClass.toFunLike.{max u1 u3, u1, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) M (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u1 u3, u1, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1) (MonoidHom.monoidHomClass.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)))) (FunLike.coe.{max (succ u3) (succ u1), max (succ u3) (succ u1), max (succ u3) (succ u1)} (Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (α -> M) (fun (a : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) a) (Equiv.instFunLikeEquiv.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (FreeMonoid.lift.{u1, u3} α M _inst_1) f) x)) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) (fun (_x : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u1} α) => M) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) M (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u1 u3, u1, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1) (MonoidHom.monoidHomClass.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)))) (FunLike.coe.{max (succ u3) (succ u1), max (succ u3) (succ u1), max (succ u3) (succ u1)} (Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (FreeMonoid.lift.{u1, u3} α M _inst_1) f) x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f)) (FreeMonoid.{u1} α) (fun (_x : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u1} α) => N) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f)) (FreeMonoid.{u1} α) N (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f)) (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)))) (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 u2) (succ u1)} (α -> N) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2))) (α -> N) (fun (_x : α -> N) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (α -> N) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2))) (FreeMonoid.lift.{u1, u2} α N _inst_2) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f)) x)
 Case conversion may be inaccurate. Consider using '#align free_monoid.hom_map_lift FreeMonoid.hom_map_liftₓ'. -/
 @[to_additive]
 theorem hom_map_lift (g : M →* N) (f : α → M) (x : FreeMonoid α) : g (lift f x) = lift (g ∘ f) x :=
@@ -472,7 +472,7 @@ def mkMulAction (f : α → β → β) : MulAction (FreeMonoid α) β
 lean 3 declaration is
   forall {α : Type.{u1}} {β : Type.{u2}} (f : α -> β -> β) (l : FreeMonoid.{u1} α) (b : β), Eq.{succ u2} β (SMul.smul.{u1, u2} (FreeMonoid.{u1} α) β (MulAction.toHasSmul.{u1, u2} (FreeMonoid.{u1} α) β (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α))) (FreeMonoid.mkMulAction.{u1, u2} α β f)) l b) (List.foldr.{u1, u2} α β f b (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (FreeMonoid.{u1} α) (List.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} (FreeMonoid.{u1} α) (List.{u1} α)) => (FreeMonoid.{u1} α) -> (List.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} (FreeMonoid.{u1} α) (List.{u1} α)) (FreeMonoid.toList.{u1} α) l))
 but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} (f : α -> β -> β) (l : FreeMonoid.{u2} α) (b : β), Eq.{succ u1} β (HSMul.hSMul.{u2, u1, u1} (FreeMonoid.{u2} α) β β (instHSMul.{u2, u1} (FreeMonoid.{u2} α) β (MulAction.toSMul.{u2, u1} (FreeMonoid.{u2} α) β (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))) (FreeMonoid.mkMulAction.{u2, u1} α β f))) l b) (List.foldr.{u2, u1} α β f b (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : FreeMonoid.{u2} α) => List.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.toList.{u2} α) l))
+  forall {α : Type.{u2}} {β : Type.{u1}} (f : α -> β -> β) (l : FreeMonoid.{u2} α) (b : β), Eq.{succ u1} β (HSMul.hSMul.{u2, u1, u1} (FreeMonoid.{u2} α) β β (instHSMul.{u2, u1} (FreeMonoid.{u2} α) β (MulAction.toSMul.{u2, u1} (FreeMonoid.{u2} α) β (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))) (FreeMonoid.mkMulAction.{u2, u1} α β f))) l b) (List.foldr.{u2, u1} α β f b (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : FreeMonoid.{u2} α) => List.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.toList.{u2} α) l))
 Case conversion may be inaccurate. Consider using '#align free_monoid.smul_def FreeMonoid.smul_defₓ'. -/
 @[to_additive]
 theorem smul_def (f : α → β → β) (l : FreeMonoid α) (b : β) :
@@ -486,7 +486,7 @@ theorem smul_def (f : α → β → β) (l : FreeMonoid α) (b : β) :
 lean 3 declaration is
   forall {α : Type.{u1}} {β : Type.{u2}} (f : α -> β -> β) (l : List.{u1} α) (b : β), Eq.{succ u2} β (SMul.smul.{u1, u2} (FreeMonoid.{u1} α) β (MulAction.toHasSmul.{u1, u2} (FreeMonoid.{u1} α) β (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α))) (FreeMonoid.mkMulAction.{u1, u2} α β f)) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (List.{u1} α) (FreeMonoid.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} (List.{u1} α) (FreeMonoid.{u1} α)) => (List.{u1} α) -> (FreeMonoid.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} (List.{u1} α) (FreeMonoid.{u1} α)) (FreeMonoid.ofList.{u1} α) l) b) (List.foldr.{u1, u2} α β f b l)
 but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} (f : α -> β -> β) (l : List.{u2} α) (b : β), Eq.{succ u1} β (HSMul.hSMul.{u2, u1, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : List.{u2} α) => FreeMonoid.{u2} α) l) β β (instHSMul.{u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : List.{u2} α) => FreeMonoid.{u2} α) l) β (MulAction.toSMul.{u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : List.{u2} α) => FreeMonoid.{u2} α) l) β (RightCancelMonoid.toMonoid.{u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : List.{u2} α) => FreeMonoid.{u2} α) l) (CancelMonoid.toRightCancelMonoid.{u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : List.{u2} α) => FreeMonoid.{u2} α) l) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))) (FreeMonoid.mkMulAction.{u2, u1} α β f))) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (List.{u2} α) (FreeMonoid.{u2} α)) (List.{u2} α) (fun (_x : List.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : List.{u2} α) => FreeMonoid.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (List.{u2} α) (FreeMonoid.{u2} α)) (FreeMonoid.ofList.{u2} α) l) b) (List.foldr.{u2, u1} α β f b l)
+  forall {α : Type.{u2}} {β : Type.{u1}} (f : α -> β -> β) (l : List.{u2} α) (b : β), Eq.{succ u1} β (HSMul.hSMul.{u2, u1, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : List.{u2} α) => FreeMonoid.{u2} α) l) β β (instHSMul.{u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : List.{u2} α) => FreeMonoid.{u2} α) l) β (MulAction.toSMul.{u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : List.{u2} α) => FreeMonoid.{u2} α) l) β (RightCancelMonoid.toMonoid.{u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : List.{u2} α) => FreeMonoid.{u2} α) l) (CancelMonoid.toRightCancelMonoid.{u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : List.{u2} α) => FreeMonoid.{u2} α) l) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))) (FreeMonoid.mkMulAction.{u2, u1} α β f))) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (List.{u2} α) (FreeMonoid.{u2} α)) (List.{u2} α) (fun (_x : List.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : List.{u2} α) => FreeMonoid.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (List.{u2} α) (FreeMonoid.{u2} α)) (FreeMonoid.ofList.{u2} α) l) b) (List.foldr.{u2, u1} α β f b l)
 Case conversion may be inaccurate. Consider using '#align free_monoid.of_list_smul FreeMonoid.ofList_smulₓ'. -/
 @[to_additive]
 theorem ofList_smul (f : α → β → β) (l : List α) (b : β) :
@@ -529,7 +529,7 @@ def map (f : α → β) : FreeMonoid α →* FreeMonoid β
 lean 3 declaration is
   forall {α : Type.{u1}} {β : Type.{u2}} (f : α -> β) (x : α), Eq.{succ u2} (FreeMonoid.{u2} β) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) => (FreeMonoid.{u1} α) -> (FreeMonoid.{u2} β)) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) (FreeMonoid.map.{u1, u2} α β f) (FreeMonoid.of.{u1} α x)) (FreeMonoid.of.{u2} β (f x))
 but is expected to have type
-  forall {α : Type.{u1}} {β : Type.{u2}} (f : α -> β) (x : α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u1} α) => FreeMonoid.{u2} β) (FreeMonoid.of.{u1} α x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))) (FreeMonoid.{u1} α) (fun (_x : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u1} α) => FreeMonoid.{u2} β) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))) (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))) (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β)))) (MonoidHom.monoidHomClass.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))))) (FreeMonoid.map.{u1, u2} α β f) (FreeMonoid.of.{u1} α x)) (FreeMonoid.of.{u2} β (f x))
+  forall {α : Type.{u1}} {β : Type.{u2}} (f : α -> β) (x : α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u1} α) => FreeMonoid.{u2} β) (FreeMonoid.of.{u1} α x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))) (FreeMonoid.{u1} α) (fun (_x : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u1} α) => FreeMonoid.{u2} β) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))) (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))) (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β)))) (MonoidHom.monoidHomClass.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))))) (FreeMonoid.map.{u1, u2} α β f) (FreeMonoid.of.{u1} α x)) (FreeMonoid.of.{u2} β (f x))
 Case conversion may be inaccurate. Consider using '#align free_monoid.map_of FreeMonoid.map_ofₓ'. -/
 @[simp, to_additive]
 theorem map_of (f : α → β) (x : α) : map f (of x) = of (f x) :=
@@ -541,7 +541,7 @@ theorem map_of (f : α → β) (x : α) : map f (of x) = of (f x) :=
 lean 3 declaration is
   forall {α : Type.{u1}} {β : Type.{u2}} (f : α -> β) (xs : FreeMonoid.{u1} α), Eq.{succ u2} (List.{u2} β) (coeFn.{succ u2, succ u2} (Equiv.{succ u2, succ u2} (FreeMonoid.{u2} β) (List.{u2} β)) (fun (_x : Equiv.{succ u2, succ u2} (FreeMonoid.{u2} β) (List.{u2} β)) => (FreeMonoid.{u2} β) -> (List.{u2} β)) (Equiv.hasCoeToFun.{succ u2, succ u2} (FreeMonoid.{u2} β) (List.{u2} β)) (FreeMonoid.toList.{u2} β) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) => (FreeMonoid.{u1} α) -> (FreeMonoid.{u2} β)) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) (FreeMonoid.map.{u1, u2} α β f) xs)) (List.map.{u1, u2} α β f (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (FreeMonoid.{u1} α) (List.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} (FreeMonoid.{u1} α) (List.{u1} α)) => (FreeMonoid.{u1} α) -> (List.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} (FreeMonoid.{u1} α) (List.{u1} α)) (FreeMonoid.toList.{u1} α) xs))
 but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} (f : α -> β) (xs : FreeMonoid.{u2} α), Eq.{succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : FreeMonoid.{u1} β) => List.{u1} β) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (fun (a : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u2} α) => FreeMonoid.{u1} β) a) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))))) (FreeMonoid.map.{u2, u1} α β f) xs)) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} (FreeMonoid.{u1} β) (List.{u1} β)) (FreeMonoid.{u1} β) (fun (_x : FreeMonoid.{u1} β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : FreeMonoid.{u1} β) => List.{u1} β) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} (FreeMonoid.{u1} β) (List.{u1} β)) (FreeMonoid.toList.{u1} β) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u2} α) => FreeMonoid.{u1} β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))))) (FreeMonoid.map.{u2, u1} α β f) xs)) (List.map.{u2, u1} α β f (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : FreeMonoid.{u2} α) => List.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.toList.{u2} α) xs))
+  forall {α : Type.{u2}} {β : Type.{u1}} (f : α -> β) (xs : FreeMonoid.{u2} α), Eq.{succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : FreeMonoid.{u1} β) => List.{u1} β) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (fun (a : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u2} α) => FreeMonoid.{u1} β) a) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))))) (FreeMonoid.map.{u2, u1} α β f) xs)) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} (FreeMonoid.{u1} β) (List.{u1} β)) (FreeMonoid.{u1} β) (fun (_x : FreeMonoid.{u1} β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : FreeMonoid.{u1} β) => List.{u1} β) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} (FreeMonoid.{u1} β) (List.{u1} β)) (FreeMonoid.toList.{u1} β) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u2} α) => FreeMonoid.{u1} β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))))) (FreeMonoid.map.{u2, u1} α β f) xs)) (List.map.{u2, u1} α β f (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : FreeMonoid.{u2} α) => List.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.toList.{u2} α) xs))
 Case conversion may be inaccurate. Consider using '#align free_monoid.to_list_map FreeMonoid.toList_mapₓ'. -/
 @[to_additive]
 theorem toList_map (f : α → β) (xs : FreeMonoid α) : (map f xs).toList = xs.toList.map f :=
@@ -553,7 +553,7 @@ theorem toList_map (f : α → β) (xs : FreeMonoid α) : (map f xs).toList = xs
 lean 3 declaration is
   forall {α : Type.{u1}} {β : Type.{u2}} (f : α -> β) (xs : List.{u1} α), Eq.{succ u2} (FreeMonoid.{u2} β) (coeFn.{succ u2, succ u2} (Equiv.{succ u2, succ u2} (List.{u2} β) (FreeMonoid.{u2} β)) (fun (_x : Equiv.{succ u2, succ u2} (List.{u2} β) (FreeMonoid.{u2} β)) => (List.{u2} β) -> (FreeMonoid.{u2} β)) (Equiv.hasCoeToFun.{succ u2, succ u2} (List.{u2} β) (FreeMonoid.{u2} β)) (FreeMonoid.ofList.{u2} β) (List.map.{u1, u2} α β f xs)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) => (FreeMonoid.{u1} α) -> (FreeMonoid.{u2} β)) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) (FreeMonoid.map.{u1, u2} α β f) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (List.{u1} α) (FreeMonoid.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} (List.{u1} α) (FreeMonoid.{u1} α)) => (List.{u1} α) -> (FreeMonoid.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} (List.{u1} α) (FreeMonoid.{u1} α)) (FreeMonoid.ofList.{u1} α) xs))
 but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} (f : α -> β) (xs : List.{u2} α), Eq.{succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : List.{u1} β) => FreeMonoid.{u1} β) (List.map.{u2, u1} α β f xs)) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} (List.{u1} β) (FreeMonoid.{u1} β)) (List.{u1} β) (fun (_x : List.{u1} β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : List.{u1} β) => FreeMonoid.{u1} β) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} (List.{u1} β) (FreeMonoid.{u1} β)) (FreeMonoid.ofList.{u1} β) (List.map.{u2, u1} α β f xs)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u2} α) => FreeMonoid.{u1} β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))))) (FreeMonoid.map.{u2, u1} α β f) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (List.{u2} α) (FreeMonoid.{u2} α)) (List.{u2} α) (fun (_x : List.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : List.{u2} α) => FreeMonoid.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (List.{u2} α) (FreeMonoid.{u2} α)) (FreeMonoid.ofList.{u2} α) xs))
+  forall {α : Type.{u2}} {β : Type.{u1}} (f : α -> β) (xs : List.{u2} α), Eq.{succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : List.{u1} β) => FreeMonoid.{u1} β) (List.map.{u2, u1} α β f xs)) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} (List.{u1} β) (FreeMonoid.{u1} β)) (List.{u1} β) (fun (_x : List.{u1} β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : List.{u1} β) => FreeMonoid.{u1} β) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} (List.{u1} β) (FreeMonoid.{u1} β)) (FreeMonoid.ofList.{u1} β) (List.map.{u2, u1} α β f xs)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : FreeMonoid.{u2} α) => FreeMonoid.{u1} β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))))) (FreeMonoid.map.{u2, u1} α β f) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (List.{u2} α) (FreeMonoid.{u2} α)) (List.{u2} α) (fun (_x : List.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : List.{u2} α) => FreeMonoid.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (List.{u2} α) (FreeMonoid.{u2} α)) (FreeMonoid.ofList.{u2} α) xs))
 Case conversion may be inaccurate. Consider using '#align free_monoid.of_list_map FreeMonoid.ofList_mapₓ'. -/
 @[to_additive]
 theorem ofList_map (f : α → β) (xs : List α) : ofList (xs.map f) = map f (ofList xs) :=
@@ -565,7 +565,7 @@ theorem ofList_map (f : α → β) (xs : List α) : ofList (xs.map f) = map f (o
 lean 3 declaration is
   forall {α : Type.{u1}} {β : Type.{u2}} (f : α -> β), Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ u2) (succ u1)) (max (succ u2) (succ u1)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> (FreeMonoid.{u2} β)) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β)))))) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> (FreeMonoid.{u2} β)) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β)))))) => (α -> (FreeMonoid.{u2} β)) -> (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β)))))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> (FreeMonoid.{u2} β)) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β)))))) (FreeMonoid.lift.{u1, u2} α (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β)))) (fun (x : α) => FreeMonoid.of.{u2} β (f x))) (FreeMonoid.map.{u1, u2} α β f)
 but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} (f : α -> β), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> (FreeMonoid.{u1} β)) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (fun (x : α) => FreeMonoid.of.{u1} β (f x))) (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 u2)} (α -> (FreeMonoid.{u1} β)) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))))) (α -> (FreeMonoid.{u1} β)) (fun (_x : α -> (FreeMonoid.{u1} β)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> (FreeMonoid.{u1} β)) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (α -> (FreeMonoid.{u1} β)) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))))) (FreeMonoid.lift.{u2, u1} α (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))) (fun (x : α) => FreeMonoid.of.{u1} β (f x))) (FreeMonoid.map.{u2, u1} α β f)
+  forall {α : Type.{u2}} {β : Type.{u1}} (f : α -> β), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> (FreeMonoid.{u1} β)) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (fun (x : α) => FreeMonoid.of.{u1} β (f x))) (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 u2)} (α -> (FreeMonoid.{u1} β)) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))))) (α -> (FreeMonoid.{u1} β)) (fun (_x : α -> (FreeMonoid.{u1} β)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.808 : α -> (FreeMonoid.{u1} β)) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (α -> (FreeMonoid.{u1} β)) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))))) (FreeMonoid.lift.{u2, u1} α (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))) (fun (x : α) => FreeMonoid.of.{u1} β (f x))) (FreeMonoid.map.{u2, u1} α β f)
 Case conversion may be inaccurate. Consider using '#align free_monoid.lift_of_comp_eq_map FreeMonoid.lift_of_comp_eq_mapₓ'. -/
 @[to_additive]
 theorem lift_of_comp_eq_map (f : α → β) : (lift fun x => of (f x)) = map f :=
Diff
@@ -311,7 +311,7 @@ theorem casesOn_of_mul {C : FreeMonoid α → Sort _} (x : α) (xs : FreeMonoid
 lean 3 declaration is
   forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] {{f : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)}} {{g : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)}}, (forall (x : α), Eq.{succ u2} M (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) => (FreeMonoid.{u1} α) -> M) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f (FreeMonoid.of.{u1} α x)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) => (FreeMonoid.{u1} α) -> M) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) g (FreeMonoid.of.{u1} α x))) -> (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f g)
 but is expected to have type
-  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] {{f : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)}} {{g : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)}}, (forall (x : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : FreeMonoid.{u2} α) => M) (FreeMonoid.of.{u2} α x)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) f (FreeMonoid.of.{u2} α x)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) g (FreeMonoid.of.{u2} α x))) -> (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f g)
+  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] {{f : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)}} {{g : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)}}, (forall (x : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u2} α) => M) (FreeMonoid.of.{u2} α x)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) f (FreeMonoid.of.{u2} α x)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) g (FreeMonoid.of.{u2} α x))) -> (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f g)
 Case conversion may be inaccurate. Consider using '#align free_monoid.hom_eq FreeMonoid.hom_eqₓ'. -/
 @[ext, to_additive]
 theorem hom_eq ⦃f g : FreeMonoid α →* M⦄ (h : ∀ x, f (of x) = g (of x)) : f = g :=
@@ -370,7 +370,7 @@ def lift : (α → M) ≃ (FreeMonoid α →* M)
 lean 3 declaration is
   forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] (f : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)), Eq.{max (succ u1) (succ u2)} (α -> M) (coeFn.{max 1 (max (max (succ u2) (succ u1)) (succ u1) (succ u2)) (max (succ u1) (succ u2)) (succ u2) (succ u1), max (max (succ u2) (succ u1)) (succ u1) (succ u2)} (Equiv.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (α -> M)) (fun (_x : Equiv.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (α -> M)) => (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) -> α -> M) (Equiv.hasCoeToFun.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (α -> M)) (Equiv.symm.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (FreeMonoid.lift.{u1, u2} α M _inst_1)) f) (Function.comp.{succ u1, succ u1, succ u2} α (FreeMonoid.{u1} α) M (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) => (FreeMonoid.{u1} α) -> M) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f) (FreeMonoid.of.{u1} α))
 but is expected to have type
-  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (f : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) => α -> M) f) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (α -> M)) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (fun (_x : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) => α -> M) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (α -> M)) (Equiv.symm.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.lift.{u2, u1} α M _inst_1)) f) (Function.comp.{succ u2, succ u2, succ u1} α (FreeMonoid.{u2} α) M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) f) (FreeMonoid.of.{u2} α))
+  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (f : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) => α -> M) f) (FunLike.coe.{max (succ u1) (succ u2), max (succ u1) (succ u2), max (succ u1) (succ u2)} (Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (α -> M)) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (fun (_x : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) => α -> M) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (α -> M)) (Equiv.symm.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.lift.{u2, u1} α M _inst_1)) f) (Function.comp.{succ u2, succ u2, succ u1} α (FreeMonoid.{u2} α) M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) f) (FreeMonoid.of.{u2} α))
 Case conversion may be inaccurate. Consider using '#align free_monoid.lift_symm_apply FreeMonoid.lift_symm_applyₓ'. -/
 @[simp, to_additive]
 theorem lift_symm_apply (f : FreeMonoid α →* M) : lift.symm f = f ∘ of :=
@@ -382,7 +382,7 @@ theorem lift_symm_apply (f : FreeMonoid α →* M) : lift.symm f = f ∘ of :=
 lean 3 declaration is
   forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] (f : α -> M) (l : FreeMonoid.{u1} α), Eq.{succ u2} M (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) => (FreeMonoid.{u1} α) -> M) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ u2) (succ u1)) (max (succ u2) (succ u1)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) => (α -> M) -> (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (FreeMonoid.lift.{u1, u2} α M _inst_1) f) l) (List.prod.{u2} M (MulOneClass.toHasMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toHasOne.{u2} M (Monoid.toMulOneClass.{u2} M _inst_1)) (List.map.{u1, u2} α M f (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (FreeMonoid.{u1} α) (List.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} (FreeMonoid.{u1} α) (List.{u1} α)) => (FreeMonoid.{u1} α) -> (List.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} (FreeMonoid.{u1} α) (List.{u1} α)) (FreeMonoid.toList.{u1} α) l)))
 but is expected to have type
-  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (f : α -> M) (l : FreeMonoid.{u2} α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : FreeMonoid.{u2} α) => M) l) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) (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 u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (FreeMonoid.lift.{u2, u1} α M _inst_1) f) l) (List.prod.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (Monoid.toOne.{u1} M _inst_1) (List.map.{u2, u1} α M f (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : FreeMonoid.{u2} α) => List.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.toList.{u2} α) l)))
+  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (f : α -> M) (l : FreeMonoid.{u2} α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u2} α) => M) l) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) (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 u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (FreeMonoid.lift.{u2, u1} α M _inst_1) f) l) (List.prod.{u1} M (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (Monoid.toOne.{u1} M _inst_1) (List.map.{u2, u1} α M f (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : FreeMonoid.{u2} α) => List.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.toList.{u2} α) l)))
 Case conversion may be inaccurate. Consider using '#align free_monoid.lift_apply FreeMonoid.lift_applyₓ'. -/
 @[to_additive]
 theorem lift_apply (f : α → M) (l : FreeMonoid α) : lift f l = (l.toList.map f).Prod :=
@@ -394,7 +394,7 @@ theorem lift_apply (f : α → M) (l : FreeMonoid α) : lift f l = (l.toList.map
 lean 3 declaration is
   forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] (f : α -> M), Eq.{max (succ u1) (succ u2)} (α -> M) (Function.comp.{succ u1, succ u1, succ u2} α (FreeMonoid.{u1} α) M (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) => (FreeMonoid.{u1} α) -> M) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ u2) (succ u1)) (max (succ u2) (succ u1)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) => (α -> M) -> (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (FreeMonoid.lift.{u1, u2} α M _inst_1) f)) (FreeMonoid.of.{u1} α)) f
 but is expected to have type
-  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (f : α -> M), Eq.{max (succ u2) (succ u1)} (α -> M) (Function.comp.{succ u2, succ u2, succ u1} α (FreeMonoid.{u2} α) M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) (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 u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (FreeMonoid.lift.{u2, u1} α M _inst_1) f)) (FreeMonoid.of.{u2} α)) f
+  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (f : α -> M), Eq.{max (succ u2) (succ u1)} (α -> M) (Function.comp.{succ u2, succ u2, succ u1} α (FreeMonoid.{u2} α) M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) f) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) (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 u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (FreeMonoid.lift.{u2, u1} α M _inst_1) f)) (FreeMonoid.of.{u2} α)) f
 Case conversion may be inaccurate. Consider using '#align free_monoid.lift_comp_of FreeMonoid.lift_comp_ofₓ'. -/
 @[to_additive]
 theorem lift_comp_of (f : α → M) : lift f ∘ of = f :=
@@ -406,7 +406,7 @@ theorem lift_comp_of (f : α → M) : lift f ∘ of = f :=
 lean 3 declaration is
   forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] (f : α -> M) (x : α), Eq.{succ u2} M (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) => (FreeMonoid.{u1} α) -> M) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ u2) (succ u1)) (max (succ u2) (succ u1)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) => (α -> M) -> (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (FreeMonoid.lift.{u1, u2} α M _inst_1) f) (FreeMonoid.of.{u1} α x)) (f x)
 but is expected to have type
-  forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] (f : α -> M) (x : α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : FreeMonoid.{u1} α) => M) (FreeMonoid.of.{u1} α x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f) (FreeMonoid.{u1} α) (fun (_x : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : FreeMonoid.{u1} α) => M) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f) (FreeMonoid.{u1} α) M (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f) (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1) (MonoidHom.monoidHomClass.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)))) (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 u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (FreeMonoid.lift.{u1, u2} α M _inst_1) f) (FreeMonoid.of.{u1} α x)) (f x)
+  forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] (f : α -> M) (x : α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u1} α) => M) (FreeMonoid.of.{u1} α x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f) (FreeMonoid.{u1} α) (fun (_x : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u1} α) => M) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f) (FreeMonoid.{u1} α) M (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f) (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1) (MonoidHom.monoidHomClass.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)))) (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 u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (FreeMonoid.lift.{u1, u2} α M _inst_1) f) (FreeMonoid.of.{u1} α x)) (f x)
 Case conversion may be inaccurate. Consider using '#align free_monoid.lift_eval_of FreeMonoid.lift_eval_ofₓ'. -/
 @[simp, to_additive]
 theorem lift_eval_of (f : α → M) (x : α) : lift f (of x) = f x :=
@@ -418,7 +418,7 @@ theorem lift_eval_of (f : α → M) (x : α) : lift f (of x) = f x :=
 lean 3 declaration is
   forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] (f : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)), Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ u2) (succ u1)) (max (succ u2) (succ u1)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) => (α -> M) -> (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (FreeMonoid.lift.{u1, u2} α M _inst_1) (Function.comp.{succ u1, succ u1, succ u2} α (FreeMonoid.{u1} α) M (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) => (FreeMonoid.{u1} α) -> M) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) f) (FreeMonoid.of.{u1} α))) f
 but is expected to have type
-  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (f : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (Function.comp.{succ u2, succ u2, succ u1} α (FreeMonoid.{u2} α) M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (a : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : FreeMonoid.{u2} α) => M) a) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) f) (FreeMonoid.of.{u2} α))) (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 u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (FreeMonoid.lift.{u2, u1} α M _inst_1) (Function.comp.{succ u2, succ u2, succ u1} α (FreeMonoid.{u2} α) M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) f) (FreeMonoid.of.{u2} α))) f
+  forall {α : Type.{u2}} {M : Type.{u1}} [_inst_1 : Monoid.{u1} M] (f : MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)), Eq.{max (succ u2) (succ u1)} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (Function.comp.{succ u2, succ u2, succ u1} α (FreeMonoid.{u2} α) M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (a : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u2} α) => M) a) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) f) (FreeMonoid.of.{u2} α))) (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 u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (α -> M) (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1))) (FreeMonoid.lift.{u2, u1} α M _inst_1) (Function.comp.{succ u2, succ u2, succ u1} α (FreeMonoid.{u2} α) M (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u2} α) => M) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} M (Monoid.toMulOneClass.{u1} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)) (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) M (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} M _inst_1)))) f) (FreeMonoid.of.{u2} α))) f
 Case conversion may be inaccurate. Consider using '#align free_monoid.lift_restrict FreeMonoid.lift_restrictₓ'. -/
 @[simp, to_additive]
 theorem lift_restrict (f : FreeMonoid α →* M) : lift (f ∘ of) = f :=
@@ -430,7 +430,7 @@ theorem lift_restrict (f : FreeMonoid α →* M) : lift (f ∘ of) = f :=
 lean 3 declaration is
   forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] {N : Type.{u3}} [_inst_2 : Monoid.{u3} N] (g : MonoidHom.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) (f : α -> M), Eq.{max (succ u3) (succ u1)} (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2)) (MonoidHom.comp.{u1, u2, u3} (FreeMonoid.{u1} α) M N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2) g (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ u2) (succ u1)) (max (succ u2) (succ u1)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) => (α -> M) -> (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (FreeMonoid.lift.{u1, u2} α M _inst_1) f)) (coeFn.{max 1 (max (max (succ u1) (succ u3)) (succ u3) (succ u1)) (max (succ u3) (succ u1)) (succ u1) (succ u3), max (max (succ u1) (succ u3)) (succ u3) (succ u1)} (Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> N) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2))) (fun (_x : Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> N) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2))) => (α -> N) -> (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2))) (Equiv.hasCoeToFun.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> N) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2))) (FreeMonoid.lift.{u1, u3} α N _inst_2) (Function.comp.{succ u1, succ u2, succ u3} α M N (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) (fun (_x : MonoidHom.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) => M -> N) (MonoidHom.hasCoeToFun.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) g) f))
 but is expected to have type
-  forall {α : Type.{u1}} {M : Type.{u3}} [_inst_1 : Monoid.{u3} M] {N : Type.{u2}} [_inst_2 : Monoid.{u2} N] (g : MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) (f : α -> M), Eq.{max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHom.comp.{u1, u3, u2} (FreeMonoid.{u1} α) M N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) g (FunLike.coe.{max (succ u3) (succ u1), max (succ u3) (succ u1), max (succ u3) (succ u1)} (Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (FreeMonoid.lift.{u1, u3} α M _inst_1) f)) (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 u2) (succ u1)} (α -> N) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2))) (α -> N) (fun (_x : α -> N) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (α -> N) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2))) (FreeMonoid.lift.{u1, u2} α N _inst_2) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f))
+  forall {α : Type.{u1}} {M : Type.{u3}} [_inst_1 : Monoid.{u3} M] {N : Type.{u2}} [_inst_2 : Monoid.{u2} N] (g : MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) (f : α -> M), Eq.{max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHom.comp.{u1, u3, u2} (FreeMonoid.{u1} α) M N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) g (FunLike.coe.{max (succ u3) (succ u1), max (succ u3) (succ u1), max (succ u3) (succ u1)} (Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (FreeMonoid.lift.{u1, u3} α M _inst_1) f)) (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 u2) (succ u1)} (α -> N) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2))) (α -> N) (fun (_x : α -> N) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (α -> N) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2))) (FreeMonoid.lift.{u1, u2} α N _inst_2) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f))
 Case conversion may be inaccurate. Consider using '#align free_monoid.comp_lift FreeMonoid.comp_liftₓ'. -/
 @[to_additive]
 theorem comp_lift (g : M →* N) (f : α → M) : g.comp (lift f) = lift (g ∘ f) :=
@@ -444,7 +444,7 @@ theorem comp_lift (g : M →* N) (f : α → M) : g.comp (lift f) = lift (g ∘
 lean 3 declaration is
   forall {α : Type.{u1}} {M : Type.{u2}} [_inst_1 : Monoid.{u2} M] {N : Type.{u3}} [_inst_2 : Monoid.{u3} N] (g : MonoidHom.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) (f : α -> M) (x : FreeMonoid.{u1} α), Eq.{succ u3} N (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) (fun (_x : MonoidHom.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) => M -> N) (MonoidHom.hasCoeToFun.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) g (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) => (FreeMonoid.{u1} α) -> M) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1)) (coeFn.{max 1 (max (max (succ u1) (succ u2)) (succ u2) (succ u1)) (max (succ u2) (succ u1)) (succ u1) (succ u2), max (max (succ u1) (succ u2)) (succ u2) (succ u1)} (Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (fun (_x : Equiv.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) => (α -> M) -> (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (Equiv.hasCoeToFun.{max (succ u1) (succ u2), max (succ u2) (succ u1)} (α -> M) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} M _inst_1))) (FreeMonoid.lift.{u1, u2} α M _inst_1) f) x)) (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2)) (fun (_x : MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2)) => (FreeMonoid.{u1} α) -> N) (MonoidHom.hasCoeToFun.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2)) (coeFn.{max 1 (max (max (succ u1) (succ u3)) (succ u3) (succ u1)) (max (succ u3) (succ u1)) (succ u1) (succ u3), max (max (succ u1) (succ u3)) (succ u3) (succ u1)} (Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> N) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2))) (fun (_x : Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> N) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2))) => (α -> N) -> (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2))) (Equiv.hasCoeToFun.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> N) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} N _inst_2))) (FreeMonoid.lift.{u1, u3} α N _inst_2) (Function.comp.{succ u1, succ u2, succ u3} α M N (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) (fun (_x : MonoidHom.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) => M -> N) (MonoidHom.hasCoeToFun.{u2, u3} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u3} N _inst_2)) g) f)) x)
 but is expected to have type
-  forall {α : Type.{u1}} {M : Type.{u3}} [_inst_1 : Monoid.{u3} M] {N : Type.{u2}} [_inst_2 : Monoid.{u2} N] (g : MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) (f : α -> M) (x : FreeMonoid.{u1} α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) (fun (a : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : FreeMonoid.{u1} α) => M) a) (MulHomClass.toFunLike.{max u1 u3, u1, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) M (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u1 u3, u1, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1) (MonoidHom.monoidHomClass.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)))) (FunLike.coe.{max (succ u3) (succ u1), max (succ u3) (succ u1), max (succ u3) (succ u1)} (Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (α -> M) (fun (a : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) a) (Equiv.instFunLikeEquiv.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (FreeMonoid.lift.{u1, u3} α M _inst_1) f) x)) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) (fun (_x : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : FreeMonoid.{u1} α) => M) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) M (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u1 u3, u1, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1) (MonoidHom.monoidHomClass.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)))) (FunLike.coe.{max (succ u3) (succ u1), max (succ u3) (succ u1), max (succ u3) (succ u1)} (Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (FreeMonoid.lift.{u1, u3} α M _inst_1) f) x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f)) (FreeMonoid.{u1} α) (fun (_x : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : FreeMonoid.{u1} α) => N) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f)) (FreeMonoid.{u1} α) N (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f)) (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)))) (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 u2) (succ u1)} (α -> N) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2))) (α -> N) (fun (_x : α -> N) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (α -> N) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2))) (FreeMonoid.lift.{u1, u2} α N _inst_2) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f)) x)
+  forall {α : Type.{u1}} {M : Type.{u3}} [_inst_1 : Monoid.{u3} M] {N : Type.{u2}} [_inst_2 : Monoid.{u2} N] (g : MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) (f : α -> M) (x : FreeMonoid.{u1} α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) (fun (a : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u1} α) => M) a) (MulHomClass.toFunLike.{max u1 u3, u1, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) M (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u1 u3, u1, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1) (MonoidHom.monoidHomClass.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)))) (FunLike.coe.{max (succ u3) (succ u1), max (succ u3) (succ u1), max (succ u3) (succ u1)} (Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (α -> M) (fun (a : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) a) (Equiv.instFunLikeEquiv.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (FreeMonoid.lift.{u1, u3} α M _inst_1) f) x)) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) (fun (_x : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u1} α) => M) _x) (MulHomClass.toFunLike.{max u1 u3, u1, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) M (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MonoidHomClass.toMulHomClass.{max u1 u3, u1, u3} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) f) (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1) (MonoidHom.monoidHomClass.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)))) (FunLike.coe.{max (succ u3) (succ u1), max (succ u3) (succ u1), max (succ u3) (succ u1)} (Equiv.{max (succ u1) (succ u3), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (α -> M) (fun (_x : α -> M) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> M) => MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1)) _x) (Equiv.instFunLikeEquiv.{max (succ u3) (succ u1), max (succ u3) (succ u1)} (α -> M) (MonoidHom.{u1, u3} (FreeMonoid.{u1} α) M (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u3} M _inst_1))) (FreeMonoid.lift.{u1, u3} α M _inst_1) f) x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f)) (FreeMonoid.{u1} α) (fun (_x : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u1} α) => N) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f)) (FreeMonoid.{u1} α) N (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f)) (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)))) (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 u2) (succ u1)} (α -> N) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2))) (α -> N) (fun (_x : α -> N) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : α -> N) => MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2)) _x) (Equiv.instFunLikeEquiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (α -> N) (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) N (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} N _inst_2))) (FreeMonoid.lift.{u1, u2} α N _inst_2) (Function.comp.{succ u1, succ u3, succ u2} α M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (MulOneClass.toMul.{u3} M (Monoid.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (Monoid.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2) (MonoidHom.monoidHomClass.{u3, u2} M N (Monoid.toMulOneClass.{u3} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)))) g) f)) x)
 Case conversion may be inaccurate. Consider using '#align free_monoid.hom_map_lift FreeMonoid.hom_map_liftₓ'. -/
 @[to_additive]
 theorem hom_map_lift (g : M →* N) (f : α → M) (x : FreeMonoid α) : g (lift f x) = lift (g ∘ f) x :=
@@ -529,7 +529,7 @@ def map (f : α → β) : FreeMonoid α →* FreeMonoid β
 lean 3 declaration is
   forall {α : Type.{u1}} {β : Type.{u2}} (f : α -> β) (x : α), Eq.{succ u2} (FreeMonoid.{u2} β) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) => (FreeMonoid.{u1} α) -> (FreeMonoid.{u2} β)) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) (FreeMonoid.map.{u1, u2} α β f) (FreeMonoid.of.{u1} α x)) (FreeMonoid.of.{u2} β (f x))
 but is expected to have type
-  forall {α : Type.{u1}} {β : Type.{u2}} (f : α -> β) (x : α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : FreeMonoid.{u1} α) => FreeMonoid.{u2} β) (FreeMonoid.of.{u1} α x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))) (FreeMonoid.{u1} α) (fun (_x : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : FreeMonoid.{u1} α) => FreeMonoid.{u2} β) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))) (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))) (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β)))) (MonoidHom.monoidHomClass.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))))) (FreeMonoid.map.{u1, u2} α β f) (FreeMonoid.of.{u1} α x)) (FreeMonoid.of.{u2} β (f x))
+  forall {α : Type.{u1}} {β : Type.{u2}} (f : α -> β) (x : α), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u1} α) => FreeMonoid.{u2} β) (FreeMonoid.of.{u1} α x)) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))) (FreeMonoid.{u1} α) (fun (_x : FreeMonoid.{u1} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u1} α) => FreeMonoid.{u2} β) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))) (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (MulOneClass.toMul.{u1} (FreeMonoid.{u1} α) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α))))) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))) (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β)))) (MonoidHom.monoidHomClass.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} β))))))) (FreeMonoid.map.{u1, u2} α β f) (FreeMonoid.of.{u1} α x)) (FreeMonoid.of.{u2} β (f x))
 Case conversion may be inaccurate. Consider using '#align free_monoid.map_of FreeMonoid.map_ofₓ'. -/
 @[simp, to_additive]
 theorem map_of (f : α → β) (x : α) : map f (of x) = of (f x) :=
@@ -541,7 +541,7 @@ theorem map_of (f : α → β) (x : α) : map f (of x) = of (f x) :=
 lean 3 declaration is
   forall {α : Type.{u1}} {β : Type.{u2}} (f : α -> β) (xs : FreeMonoid.{u1} α), Eq.{succ u2} (List.{u2} β) (coeFn.{succ u2, succ u2} (Equiv.{succ u2, succ u2} (FreeMonoid.{u2} β) (List.{u2} β)) (fun (_x : Equiv.{succ u2, succ u2} (FreeMonoid.{u2} β) (List.{u2} β)) => (FreeMonoid.{u2} β) -> (List.{u2} β)) (Equiv.hasCoeToFun.{succ u2, succ u2} (FreeMonoid.{u2} β) (List.{u2} β)) (FreeMonoid.toList.{u2} β) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) => (FreeMonoid.{u1} α) -> (FreeMonoid.{u2} β)) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) (FreeMonoid.map.{u1, u2} α β f) xs)) (List.map.{u1, u2} α β f (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (FreeMonoid.{u1} α) (List.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} (FreeMonoid.{u1} α) (List.{u1} α)) => (FreeMonoid.{u1} α) -> (List.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} (FreeMonoid.{u1} α) (List.{u1} α)) (FreeMonoid.toList.{u1} α) xs))
 but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} (f : α -> β) (xs : FreeMonoid.{u2} α), Eq.{succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : FreeMonoid.{u1} β) => List.{u1} β) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (fun (a : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : FreeMonoid.{u2} α) => FreeMonoid.{u1} β) a) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))))) (FreeMonoid.map.{u2, u1} α β f) xs)) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} (FreeMonoid.{u1} β) (List.{u1} β)) (FreeMonoid.{u1} β) (fun (_x : FreeMonoid.{u1} β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : FreeMonoid.{u1} β) => List.{u1} β) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} (FreeMonoid.{u1} β) (List.{u1} β)) (FreeMonoid.toList.{u1} β) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : FreeMonoid.{u2} α) => FreeMonoid.{u1} β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))))) (FreeMonoid.map.{u2, u1} α β f) xs)) (List.map.{u2, u1} α β f (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : FreeMonoid.{u2} α) => List.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.toList.{u2} α) xs))
+  forall {α : Type.{u2}} {β : Type.{u1}} (f : α -> β) (xs : FreeMonoid.{u2} α), Eq.{succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : FreeMonoid.{u1} β) => List.{u1} β) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (fun (a : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u2} α) => FreeMonoid.{u1} β) a) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))))) (FreeMonoid.map.{u2, u1} α β f) xs)) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} (FreeMonoid.{u1} β) (List.{u1} β)) (FreeMonoid.{u1} β) (fun (_x : FreeMonoid.{u1} β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : FreeMonoid.{u1} β) => List.{u1} β) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} (FreeMonoid.{u1} β) (List.{u1} β)) (FreeMonoid.toList.{u1} β) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u2} α) => FreeMonoid.{u1} β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))))) (FreeMonoid.map.{u2, u1} α β f) xs)) (List.map.{u2, u1} α β f (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : FreeMonoid.{u2} α) => List.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (FreeMonoid.{u2} α) (List.{u2} α)) (FreeMonoid.toList.{u2} α) xs))
 Case conversion may be inaccurate. Consider using '#align free_monoid.to_list_map FreeMonoid.toList_mapₓ'. -/
 @[to_additive]
 theorem toList_map (f : α → β) (xs : FreeMonoid α) : (map f xs).toList = xs.toList.map f :=
@@ -553,7 +553,7 @@ theorem toList_map (f : α → β) (xs : FreeMonoid α) : (map f xs).toList = xs
 lean 3 declaration is
   forall {α : Type.{u1}} {β : Type.{u2}} (f : α -> β) (xs : List.{u1} α), Eq.{succ u2} (FreeMonoid.{u2} β) (coeFn.{succ u2, succ u2} (Equiv.{succ u2, succ u2} (List.{u2} β) (FreeMonoid.{u2} β)) (fun (_x : Equiv.{succ u2, succ u2} (List.{u2} β) (FreeMonoid.{u2} β)) => (List.{u2} β) -> (FreeMonoid.{u2} β)) (Equiv.hasCoeToFun.{succ u2, succ u2} (List.{u2} β) (FreeMonoid.{u2} β)) (FreeMonoid.ofList.{u2} β) (List.map.{u1, u2} α β f xs)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) (fun (_x : MonoidHom.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) => (FreeMonoid.{u1} α) -> (FreeMonoid.{u2} β)) (MonoidHom.hasCoeToFun.{u1, u2} (FreeMonoid.{u1} α) (FreeMonoid.{u2} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} α) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} α) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} α) (FreeMonoid.cancelMonoid.{u1} α)))) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} β) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} β) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} β) (FreeMonoid.cancelMonoid.{u2} β))))) (FreeMonoid.map.{u1, u2} α β f) (coeFn.{succ u1, succ u1} (Equiv.{succ u1, succ u1} (List.{u1} α) (FreeMonoid.{u1} α)) (fun (_x : Equiv.{succ u1, succ u1} (List.{u1} α) (FreeMonoid.{u1} α)) => (List.{u1} α) -> (FreeMonoid.{u1} α)) (Equiv.hasCoeToFun.{succ u1, succ u1} (List.{u1} α) (FreeMonoid.{u1} α)) (FreeMonoid.ofList.{u1} α) xs))
 but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} (f : α -> β) (xs : List.{u2} α), Eq.{succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : List.{u1} β) => FreeMonoid.{u1} β) (List.map.{u2, u1} α β f xs)) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} (List.{u1} β) (FreeMonoid.{u1} β)) (List.{u1} β) (fun (_x : List.{u1} β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : List.{u1} β) => FreeMonoid.{u1} β) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} (List.{u1} β) (FreeMonoid.{u1} β)) (FreeMonoid.ofList.{u1} β) (List.map.{u2, u1} α β f xs)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : FreeMonoid.{u2} α) => FreeMonoid.{u1} β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))))) (FreeMonoid.map.{u2, u1} α β f) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (List.{u2} α) (FreeMonoid.{u2} α)) (List.{u2} α) (fun (_x : List.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : List.{u2} α) => FreeMonoid.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (List.{u2} α) (FreeMonoid.{u2} α)) (FreeMonoid.ofList.{u2} α) xs))
+  forall {α : Type.{u2}} {β : Type.{u1}} (f : α -> β) (xs : List.{u2} α), Eq.{succ u1} ((fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : List.{u1} β) => FreeMonoid.{u1} β) (List.map.{u2, u1} α β f xs)) (FunLike.coe.{succ u1, succ u1, succ u1} (Equiv.{succ u1, succ u1} (List.{u1} β) (FreeMonoid.{u1} β)) (List.{u1} β) (fun (_x : List.{u1} β) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : List.{u1} β) => FreeMonoid.{u1} β) _x) (Equiv.instFunLikeEquiv.{succ u1, succ u1} (List.{u1} β) (FreeMonoid.{u1} β)) (FreeMonoid.ofList.{u1} β) (List.map.{u2, u1} α β f xs)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (fun (_x : FreeMonoid.{u2} α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : FreeMonoid.{u2} α) => FreeMonoid.{u1} β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (MulOneClass.toMul.{u2} (FreeMonoid.{u2} α) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α))))) (MulOneClass.toMul.{u1} (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))) (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β)))) (MonoidHom.monoidHomClass.{u2, u1} (FreeMonoid.{u2} α) (FreeMonoid.{u1} β) (Monoid.toMulOneClass.{u2} (FreeMonoid.{u2} α) (RightCancelMonoid.toMonoid.{u2} (FreeMonoid.{u2} α) (CancelMonoid.toRightCancelMonoid.{u2} (FreeMonoid.{u2} α) (FreeMonoid.instCancelMonoidFreeMonoid.{u2} α)))) (Monoid.toMulOneClass.{u1} (FreeMonoid.{u1} β) (RightCancelMonoid.toMonoid.{u1} (FreeMonoid.{u1} β) (CancelMonoid.toRightCancelMonoid.{u1} (FreeMonoid.{u1} β) (FreeMonoid.instCancelMonoidFreeMonoid.{u1} β))))))) (FreeMonoid.map.{u2, u1} α β f) (FunLike.coe.{succ u2, succ u2, succ u2} (Equiv.{succ u2, succ u2} (List.{u2} α) (FreeMonoid.{u2} α)) (List.{u2} α) (fun (_x : List.{u2} α) => (fun (x._@.Mathlib.Logic.Equiv.Defs._hyg.805 : List.{u2} α) => FreeMonoid.{u2} α) _x) (Equiv.instFunLikeEquiv.{succ u2, succ u2} (List.{u2} α) (FreeMonoid.{u2} α)) (FreeMonoid.ofList.{u2} α) xs))
 Case conversion may be inaccurate. Consider using '#align free_monoid.of_list_map FreeMonoid.ofList_mapₓ'. -/
 @[to_additive]
 theorem ofList_map (f : α → β) (xs : List α) : ofList (xs.map f) = map f (ofList xs) :=

Changes in mathlib4

mathlib3
mathlib4
chore(Algebra/BigOperators/List): Use Std lemmas (#11725)
  • Make Algebra.BigOperators.List.Basic, Data.List.Chain not depend on Data.Nat.Order.Basic by using Nat-specific Std lemmas rather than general mathlib ones. I leave the Data.Nat.Basic import since Algebra.BigOperators.List.Basic is algebra territory.
  • Make Algebra.BigOperators.List.Basic not depend on Algebra.Divisibility.Basic. I'm not too sure about that one since they already are algebra. My motivation is that they involve ring-like objects while big operators are about group-like objects, but this is in some sense a second order refactor.
  • As a consequence, move the divisibility and MonoidWithZero lemmas from Algebra.BigOperators.List.Basic to Algebra.BigOperators.List.Lemmas.
  • Move the content of Algebra.BigOperators.List.Defs to Algebra.BigOperators.List.Basic since no file imported the former without the latter and their imports are becoming very close after this PR.
  • Make Data.List.Count, Data.List.Dedup, Data.List.ProdSigma, Data.List.Zip not depend on Algebra.BigOperators.List.Basic.
  • As a consequence, move the big operators lemmas that were in there to Algebra.BigOperators.List.Basic. For the lemmas that were Nat -specific, keep a version of them stated using Nat.sum.
  • To help with this, add Nat.sum_eq_listSum (l : List Nat) : Nat.sum l = l.sum.
Diff
@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Simon Hudon, Yury Kudryashov
 -/
 import Mathlib.Algebra.BigOperators.List.Basic
+import Mathlib.Algebra.Group.Units
 import Mathlib.GroupTheory.GroupAction.Defs
 
 #align_import algebra.free_monoid.basic from "leanprover-community/mathlib"@"657df4339ae6ceada048c8a2980fb10e393143ec"
move(Data/List/BigOperators): Move to Algebra.BigOperators.List (#11729)

This is algebra and should be foldered as such.

Diff
@@ -3,7 +3,7 @@ Copyright (c) 2019 Simon Hudon. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Simon Hudon, Yury Kudryashov
 -/
-import Mathlib.Data.List.BigOperators.Basic
+import Mathlib.Algebra.BigOperators.List.Basic
 import Mathlib.GroupTheory.GroupAction.Defs
 
 #align_import algebra.free_monoid.basic from "leanprover-community/mathlib"@"657df4339ae6ceada048c8a2980fb10e393143ec"
chore: classify new theorem / theorem porting notes (#11432)

Classifies by adding issue number #10756 to porting notes claiming anything equivalent to:

  • "added theorem"
  • "added theorems"
  • "new theorem"
  • "new theorems"
  • "added lemma"
  • "new lemma"
  • "new lemmas"
Diff
@@ -231,7 +231,7 @@ def lift : (α → M) ≃ (FreeMonoid α →* M) where
 #align free_monoid.lift FreeMonoid.lift
 #align free_add_monoid.lift FreeAddMonoid.lift
 
--- Porting note: new
+-- Porting note (#10756): new theorem
 @[to_additive (attr := simp)]
 theorem lift_ofList (f : α → M) (l : List α) : lift f (ofList l) = (l.map f).prod :=
   prodAux_eq _
style: homogenise porting notes (#11145)

Homogenises porting notes via capitalisation and addition of whitespace.

It makes the following changes:

  • converts "--porting note" into "-- Porting note";
  • converts "porting note" into "Porting note".
Diff
@@ -231,7 +231,7 @@ def lift : (α → M) ≃ (FreeMonoid α →* M) where
 #align free_monoid.lift FreeMonoid.lift
 #align free_add_monoid.lift FreeAddMonoid.lift
 
--- porting note: new
+-- Porting note: new
 @[to_additive (attr := simp)]
 theorem lift_ofList (f : α → M) (l : List α) : lift f (ofList l) = (l.map f).prod :=
   prodAux_eq _
chore: remove duplicates about List.append (#9376)

Replace duplicates in Mathlib with theorems in Lean core.

  • List.append_left_cancelList.append_cancel_left
  • List.append_right_cancelList.append_cancel_right
Diff
@@ -81,8 +81,8 @@ instance : CancelMonoid (FreeMonoid α)
   mul_one := List.append_nil
   one_mul := List.nil_append
   mul_assoc := List.append_assoc
-  mul_left_cancel _ _ _ := List.append_left_cancel
-  mul_right_cancel _ _ _ := List.append_right_cancel
+  mul_left_cancel _ _ _ := List.append_cancel_left
+  mul_right_cancel _ _ _ := List.append_cancel_right
 
 @[to_additive]
 instance : Inhabited (FreeMonoid α) := ⟨1⟩
chore(*): rename FunLike to DFunLike (#9785)

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

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

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

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

Diff
@@ -271,7 +271,7 @@ theorem comp_lift (g : M →* N) (f : α → M) : g.comp (lift f) = lift (g ∘
 
 @[to_additive]
 theorem hom_map_lift (g : M →* N) (f : α → M) (x : FreeMonoid α) : g (lift f x) = lift (g ∘ f) x :=
-  FunLike.ext_iff.1 (comp_lift g f) x
+  DFunLike.ext_iff.1 (comp_lift g f) x
 #align free_monoid.hom_map_lift FreeMonoid.hom_map_lift
 #align free_add_monoid.hom_map_lift FreeAddMonoid.hom_map_lift
 
@@ -351,7 +351,7 @@ theorem map_id : map (@id α) = MonoidHom.id (FreeMonoid α) := hom_eq fun _ ↦
 @[to_additive]
 instance uniqueUnits : Unique (FreeMonoid α)ˣ where
   uniq u := Units.ext <| toList.injective <|
-    have : toList u.val ++ toList u.inv = [] := FunLike.congr_arg toList u.val_inv
+    have : toList u.val ++ toList u.inv = [] := DFunLike.congr_arg toList u.val_inv
     (List.append_eq_nil.mp this).1
 
 end FreeMonoid
chore: delete DecidableEq instance in Algebra.FreeMonoid.Basic (#9741)
Diff
@@ -31,10 +31,6 @@ def FreeMonoid (α) := List α
 
 namespace FreeMonoid
 
--- Porting note: TODO. Check this is still needed
-@[to_additive]
-instance [DecidableEq α] : DecidableEq (FreeMonoid α) := instDecidableEqList
-
 /-- The identity equivalence between `FreeMonoid α` and `List α`. -/
 @[to_additive "The identity equivalence between `FreeAddMonoid α` and `List α`."]
 def toList : FreeMonoid α ≃ List α := Equiv.refl _
chore: Generalise monotonicity of multiplication lemmas to semirings (#9369)

Many lemmas about BlahOrderedRing α did not mention negation. I could generalise almost all those lemmas to BlahOrderedSemiring α + ExistsAddOfLE α except for a series of five lemmas (left a TODO about them).

Now those lemmas apply to things like the naturals. This is not very useful on its own, because those lemmas are trivially true on canonically ordered semirings (they are about multiplication by negative elements, of which there are none, or nonnegativity of squares, but we already know everything is nonnegative), except that I will soon add more complicated inequalities that are based on those, and it would be a shame having to write two versions of each: one for ordered rings, one for canonically ordered semirings.

A similar refactor could be made for scalar multiplication, but this PR is big enough already.

From LeanAPAP

Diff
@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Simon Hudon, Yury Kudryashov
 -/
 import Mathlib.Data.List.BigOperators.Basic
+import Mathlib.GroupTheory.GroupAction.Defs
 
 #align_import algebra.free_monoid.basic from "leanprover-community/mathlib"@"657df4339ae6ceada048c8a2980fb10e393143ec"
 
feat(Algebra/FreeMonoid): the units are unique (#8904)
Diff
@@ -350,4 +350,11 @@ theorem map_id : map (@id α) = MonoidHom.id (FreeMonoid α) := hom_eq fun _ ↦
 #align free_monoid.map_id FreeMonoid.map_id
 #align free_add_monoid.map_id FreeAddMonoid.map_id
 
+/-- The only invertible element of the free monoid is 1; this instance enables `units_eq_one`. -/
+@[to_additive]
+instance uniqueUnits : Unique (FreeMonoid α)ˣ where
+  uniq u := Units.ext <| toList.injective <|
+    have : toList u.val ++ toList u.inv = [] := FunLike.congr_arg toList u.val_inv
+    (List.append_eq_nil.mp this).1
+
 end FreeMonoid
chore: banish Type _ and Sort _ (#6499)

We remove all possible occurences of Type _ and Sort _ in favor of Type* and Sort*.

This has nice performance benefits.

Diff
@@ -20,7 +20,7 @@ import Mathlib.Data.List.BigOperators.Basic
 -/
 
 
-variable {α : Type _} {β : Type _} {γ : Type _} {M : Type _} [Monoid M] {N : Type _} [Monoid N]
+variable {α : Type*} {β : Type*} {γ : Type*} {M : Type*} [Monoid M] {N : Type*} [Monoid N]
 
 /-- Free monoid over a given alphabet. -/
 @[to_additive "Free nonabelian additive monoid over a given alphabet"]
@@ -157,19 +157,19 @@ theorem of_injective : Function.Injective (@of α) := List.singleton_injective
 @[to_additive (attr := elab_as_elim) "Recursor for `FreeAddMonoid` using `0` and
 `FreeAddMonoid.of x + xs` instead of `[]` and `x :: xs`."]
 -- Porting note: change from `List.recOn` to `List.rec` since only the latter is computable
-def recOn {C : FreeMonoid α → Sort _} (xs : FreeMonoid α) (h0 : C 1)
+def recOn {C : FreeMonoid α → Sort*} (xs : FreeMonoid α) (h0 : C 1)
     (ih : ∀ x xs, C xs → C (of x * xs)) : C xs := List.rec h0 ih xs
 #align free_monoid.rec_on FreeMonoid.recOn
 #align free_add_monoid.rec_on FreeAddMonoid.recOn
 
 @[to_additive (attr := simp)]
-theorem recOn_one {C : FreeMonoid α → Sort _} (h0 : C 1) (ih : ∀ x xs, C xs → C (of x * xs)) :
+theorem recOn_one {C : FreeMonoid α → Sort*} (h0 : C 1) (ih : ∀ x xs, C xs → C (of x * xs)) :
     @recOn α C 1 h0 ih = h0 := rfl
 #align free_monoid.rec_on_one FreeMonoid.recOn_one
 #align free_add_monoid.rec_on_zero FreeAddMonoid.recOn_zero
 
 @[to_additive (attr := simp)]
-theorem recOn_of_mul {C : FreeMonoid α → Sort _} (x : α) (xs : FreeMonoid α) (h0 : C 1)
+theorem recOn_of_mul {C : FreeMonoid α → Sort*} (x : α) (xs : FreeMonoid α) (h0 : C 1)
     (ih : ∀ x xs, C xs → C (of x * xs)) : @recOn α C (of x * xs) h0 ih = ih x xs (recOn xs h0 ih) :=
   rfl
 #align free_monoid.rec_on_of_mul FreeMonoid.recOn_of_mul
@@ -179,19 +179,19 @@ theorem recOn_of_mul {C : FreeMonoid α → Sort _} (x : α) (xs : FreeMonoid α
 `[]` and `x :: xs`. -/
 @[to_additive (attr := elab_as_elim) "A version of `List.casesOn` for `FreeAddMonoid` using `0` and
 `FreeAddMonoid.of x + xs` instead of `[]` and `x :: xs`."]
-def casesOn {C : FreeMonoid α → Sort _} (xs : FreeMonoid α) (h0 : C 1)
+def casesOn {C : FreeMonoid α → Sort*} (xs : FreeMonoid α) (h0 : C 1)
     (ih : ∀ x xs, C (of x * xs)) : C xs := List.casesOn xs h0 ih
 #align free_monoid.cases_on FreeMonoid.casesOn
 #align free_add_monoid.cases_on FreeAddMonoid.casesOn
 
 @[to_additive (attr := simp)]
-theorem casesOn_one {C : FreeMonoid α → Sort _} (h0 : C 1) (ih : ∀ x xs, C (of x * xs)) :
+theorem casesOn_one {C : FreeMonoid α → Sort*} (h0 : C 1) (ih : ∀ x xs, C (of x * xs)) :
     @casesOn α C 1 h0 ih = h0 := rfl
 #align free_monoid.cases_on_one FreeMonoid.casesOn_one
 #align free_add_monoid.cases_on_zero FreeAddMonoid.casesOn_zero
 
 @[to_additive (attr := simp)]
-theorem casesOn_of_mul {C : FreeMonoid α → Sort _} (x : α) (xs : FreeMonoid α) (h0 : C 1)
+theorem casesOn_of_mul {C : FreeMonoid α → Sort*} (x : α) (xs : FreeMonoid α) (h0 : C 1)
     (ih : ∀ x xs, C (of x * xs)) : @casesOn α C (of x * xs) h0 ih = ih x xs := rfl
 #align free_monoid.cases_on_of_mul FreeMonoid.casesOn_of_mul
 #align free_add_monoid.cases_on_of_add FreeAddMonoid.casesOn_of_add
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

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

Diff
@@ -2,14 +2,11 @@
 Copyright (c) 2019 Simon Hudon. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Simon Hudon, Yury Kudryashov
-
-! This file was ported from Lean 3 source module algebra.free_monoid.basic
-! leanprover-community/mathlib commit 657df4339ae6ceada048c8a2980fb10e393143ec
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.Data.List.BigOperators.Basic
 
+#align_import algebra.free_monoid.basic from "leanprover-community/mathlib"@"657df4339ae6ceada048c8a2980fb10e393143ec"
+
 /-!
 # Free monoid over a given alphabet
 
chore: cleanup whitespace (#5988)

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

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

Diff
@@ -202,7 +202,7 @@ theorem casesOn_of_mul {C : FreeMonoid α → Sort _} (x : α) (xs : FreeMonoid
 @[to_additive (attr := ext)]
 theorem hom_eq ⦃f g : FreeMonoid α →* M⦄ (h : ∀ x, f (of x) = g (of x)) : f = g :=
   MonoidHom.ext fun l ↦ recOn l (f.map_one.trans g.map_one.symm)
-    (fun x xs hxs ↦ by  simp only [h, hxs, MonoidHom.map_mul])
+    (fun x xs hxs ↦ by simp only [h, hxs, MonoidHom.map_mul])
 #align free_monoid.hom_eq FreeMonoid.hom_eq
 #align free_add_monoid.hom_eq FreeAddMonoid.hom_eq
 
@@ -211,14 +211,14 @@ The purpose is to make `FreeMonoid.lift_eval_of` true by `rfl`. -/
 @[to_additive "A variant of `List.sum` that has `[x].sum = x` true definitionally.
 The purpose is to make `FreeAddMonoid.lift_eval_of` true by `rfl`."]
 def prodAux {M} [Monoid M] : List M → M
-  | []  => 1
+  | [] => 1
   | (x :: xs) => List.foldl (· * ·) x xs
 #align free_monoid.prod_aux FreeMonoid.prodAux
 #align free_add_monoid.sum_aux FreeAddMonoid.sumAux
 
 @[to_additive]
 lemma prodAux_eq : ∀ l : List M, FreeMonoid.prodAux l = l.prod
-  | []  => rfl
+  | [] => rfl
   | (_ :: xs) => congr_arg (fun x => List.foldl (· * ·) x xs) (one_mul _).symm
 #align free_monoid.prod_aux_eq FreeMonoid.prodAux_eq
 #align free_add_monoid.sum_aux_eq FreeAddMonoid.sumAux_eq
chore: cleanup of some ext porting notes (#5176)

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

Diff
@@ -269,9 +269,9 @@ theorem lift_restrict (f : FreeMonoid α →* M) : lift (f ∘ of) = f := lift.a
 #align free_add_monoid.lift_restrict FreeAddMonoid.lift_restrict
 
 @[to_additive]
-theorem comp_lift (g : M →* N) (f : α → M) : g.comp (lift f) = lift (g ∘ f) :=
-  -- Porting note: replace ext by FreeMonoid.hom_eq
-  FreeMonoid.hom_eq (by simp)
+theorem comp_lift (g : M →* N) (f : α → M) : g.comp (lift f) = lift (g ∘ f) := by
+  ext
+  simp
 #align free_monoid.comp_lift FreeMonoid.comp_lift
 #align free_add_monoid.comp_lift FreeAddMonoid.comp_lift
 
chore: formatting issues (#4947)

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

Diff
@@ -240,7 +240,7 @@ def lift : (α → M) ≃ (FreeMonoid α →* M) where
 -- porting note: new
 @[to_additive (attr := simp)]
 theorem lift_ofList (f : α → M) (l : List α) : lift f (ofList l) = (l.map f).prod :=
-prodAux_eq _
+  prodAux_eq _
 
 @[to_additive (attr := simp)]
 theorem lift_symm_apply (f : FreeMonoid α →* M) : lift.symm f = f ∘ of := rfl
@@ -249,7 +249,7 @@ theorem lift_symm_apply (f : FreeMonoid α →* M) : lift.symm f = f ∘ of := r
 
 @[to_additive]
 theorem lift_apply (f : α → M) (l : FreeMonoid α) : lift f l = ((toList l).map f).prod :=
-prodAux_eq _
+  prodAux_eq _
 #align free_monoid.lift_apply FreeMonoid.lift_apply
 #align free_add_monoid.lift_apply FreeAddMonoid.lift_apply
 
@@ -270,7 +270,7 @@ theorem lift_restrict (f : FreeMonoid α →* M) : lift (f ∘ of) = f := lift.a
 
 @[to_additive]
 theorem comp_lift (g : M →* N) (f : α → M) : g.comp (lift f) = lift (g ∘ f) :=
--- Porting note: replace ext by FreeMonoid.hom_eq
+  -- Porting note: replace ext by FreeMonoid.hom_eq
   FreeMonoid.hom_eq (by simp)
 #align free_monoid.comp_lift FreeMonoid.comp_lift
 #align free_add_monoid.comp_lift FreeAddMonoid.comp_lift
chore: update SHA from #1497 (#2050)

Comparing https://leanprover-community.github.io/mathlib-port-status/file/algebra/free_monoid/basic against #1497 shows that this is already up to date.

Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Simon Hudon, Yury Kudryashov
 
 ! This file was ported from Lean 3 source module algebra.free_monoid.basic
-! leanprover-community/mathlib commit dd71334db81d0bd444af1ee339a29298bef40734
+! leanprover-community/mathlib commit 657df4339ae6ceada048c8a2980fb10e393143ec
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
Fix: Move more attributes to the attr argument of to_additive (#2558)
Diff
@@ -180,7 +180,7 @@ theorem recOn_of_mul {C : FreeMonoid α → Sort _} (x : α) (xs : FreeMonoid α
 
 /-- A version of `List.cases_on` for `FreeMonoid` using `1` and `FreeMonoid.of x * xs` instead of
 `[]` and `x :: xs`. -/
-@[elab_as_elim, to_additive "A version of `List.casesOn` for `FreeAddMonoid` using `0` and
+@[to_additive (attr := elab_as_elim) "A version of `List.casesOn` for `FreeAddMonoid` using `0` and
 `FreeAddMonoid.of x + xs` instead of `[]` and `x :: xs`."]
 def casesOn {C : FreeMonoid α → Sort _} (xs : FreeMonoid α) (h0 : C 1)
     (ih : ∀ x xs, C (of x * xs)) : C xs := List.casesOn xs h0 ih
feat: port LinearAlgebra.TensorProduct (#2539)

It was quite smooth. I didn't have to make changes that I expect to change downstream files, so I left few porting notes.

Comments that I didn't make into porting notes:

  • attribute [local ext] ext had to be changed to attribute [local ext high] ext
  • Sometimes M ⊗ N needed to be replaced by M ⊗[R] N in theorem statements.
  • I needed to make a few fixes in other files. I want to go through the library globally and fix this error, but I'm waiting on #1881 to get merged, because those two things would have many merge conflicts.

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

Diff
@@ -157,8 +157,8 @@ theorem of_injective : Function.Injective (@of α) := List.singleton_injective
 #align free_add_monoid.of_injective FreeAddMonoid.of_injective
 
 /-- Recursor for `FreeMonoid` using `1` and `FreeMonoid.of x * xs` instead of `[]` and `x :: xs`. -/
-@[elab_as_elim, to_additive "Recursor for `FreeAddMonoid` using `0` and `FreeAddMonoid.of x + xs`
-instead of `[]` and `x :: xs`."]
+@[to_additive (attr := elab_as_elim) "Recursor for `FreeAddMonoid` using `0` and
+`FreeAddMonoid.of x + xs` instead of `[]` and `x :: xs`."]
 -- Porting note: change from `List.recOn` to `List.rec` since only the latter is computable
 def recOn {C : FreeMonoid α → Sort _} (xs : FreeMonoid α) (h0 : C 1)
     (ih : ∀ x xs, C xs → C (of x * xs)) : C xs := List.rec h0 ih xs
feat: add FreeMonoid.lift_ofList (#2193)
Diff
@@ -226,8 +226,7 @@ lemma prodAux_eq : ∀ l : List M, FreeMonoid.prodAux l = l.prod
 /-- Equivalence between maps `α → M` and monoid homomorphisms `FreeMonoid α →* M`. -/
 @[to_additive "Equivalence between maps `α → A` and additive monoid homomorphisms
 `FreeAddMonoid α →+ A`."]
-def lift : (α → M) ≃ (FreeMonoid α →* M)
-    where
+def lift : (α → M) ≃ (FreeMonoid α →* M) where
   toFun f :=
   { toFun := fun l ↦ prodAux ((toList l).map f)
     map_one' := rfl
@@ -238,6 +237,11 @@ def lift : (α → M) ≃ (FreeMonoid α →* M)
 #align free_monoid.lift FreeMonoid.lift
 #align free_add_monoid.lift FreeAddMonoid.lift
 
+-- porting note: new
+@[to_additive (attr := simp)]
+theorem lift_ofList (f : α → M) (l : List α) : lift f (ofList l) = (l.map f).prod :=
+prodAux_eq _
+
 @[to_additive (attr := simp)]
 theorem lift_symm_apply (f : FreeMonoid α →* M) : lift.symm f = f ∘ of := rfl
 #align free_monoid.lift_symm_apply FreeMonoid.lift_symm_apply
chore: add missing #align statements (#1902)

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

  • take all mathlib 3 names, remove _ and make all uppercase letters into lowercase
  • take all mathlib 4 names, remove _ and make all uppercase letters into lowercase
  • look for matches, and create pairs (original_lean3_name, OriginalLean4Name)
  • for pairs that do not have an align statement:
    • use Lean 4 to lookup the file + position of the Lean 4 name
    • add an #align statement just before the next empty line
  • manually fix some tiny mistakes (e.g., empty lines in proofs might cause the #align statement to have been inserted too early)
Diff
@@ -213,11 +213,15 @@ The purpose is to make `FreeAddMonoid.lift_eval_of` true by `rfl`."]
 def prodAux {M} [Monoid M] : List M → M
   | []  => 1
   | (x :: xs) => List.foldl (· * ·) x xs
+#align free_monoid.prod_aux FreeMonoid.prodAux
+#align free_add_monoid.sum_aux FreeAddMonoid.sumAux
 
 @[to_additive]
 lemma prodAux_eq : ∀ l : List M, FreeMonoid.prodAux l = l.prod
   | []  => rfl
   | (_ :: xs) => congr_arg (fun x => List.foldl (· * ·) x xs) (one_mul _).symm
+#align free_monoid.prod_aux_eq FreeMonoid.prodAux_eq
+#align free_add_monoid.sum_aux_eq FreeAddMonoid.sumAux_eq
 
 /-- Equivalence between maps `α → M` and monoid homomorphisms `FreeMonoid α →* M`. -/
 @[to_additive "Equivalence between maps `α → A` and additive monoid homomorphisms
chore: add #align statements for to_additive decls (#1816)

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

Diff
@@ -29,6 +29,7 @@ variable {α : Type _} {β : Type _} {γ : Type _} {M : Type _} [Monoid M] {N :
 @[to_additive "Free nonabelian additive monoid over a given alphabet"]
 def FreeMonoid (α) := List α
 #align free_monoid FreeMonoid
+#align free_add_monoid FreeAddMonoid
 
 namespace FreeMonoid
 
@@ -40,35 +41,43 @@ instance [DecidableEq α] : DecidableEq (FreeMonoid α) := instDecidableEqList
 @[to_additive "The identity equivalence between `FreeAddMonoid α` and `List α`."]
 def toList : FreeMonoid α ≃ List α := Equiv.refl _
 #align free_monoid.to_list FreeMonoid.toList
+#align free_add_monoid.to_list FreeAddMonoid.toList
 
 /-- The identity equivalence between `List α` and `FreeMonoid α`. -/
 @[to_additive "The identity equivalence between `List α` and `FreeAddMonoid α`."]
 def ofList : List α ≃ FreeMonoid α := Equiv.refl _
 #align free_monoid.of_list FreeMonoid.ofList
+#align free_add_monoid.of_list FreeAddMonoid.ofList
 
 @[to_additive (attr := simp)]
 theorem toList_symm : (@toList α).symm = ofList := rfl
 #align free_monoid.to_list_symm FreeMonoid.toList_symm
+#align free_add_monoid.to_list_symm FreeAddMonoid.toList_symm
 
 @[to_additive (attr := simp)]
 theorem ofList_symm : (@ofList α).symm = toList := rfl
 #align free_monoid.of_list_symm FreeMonoid.ofList_symm
+#align free_add_monoid.of_list_symm FreeAddMonoid.ofList_symm
 
 @[to_additive (attr := simp)]
 theorem toList_ofList (l : List α) : toList (ofList l) = l := rfl
 #align free_monoid.to_list_of_list FreeMonoid.toList_ofList
+#align free_add_monoid.to_list_of_list FreeAddMonoid.toList_ofList
 
 @[to_additive (attr := simp)]
 theorem ofList_toList (xs : FreeMonoid α) : ofList (toList xs) = xs := rfl
 #align free_monoid.of_list_to_list FreeMonoid.ofList_toList
+#align free_add_monoid.of_list_to_list FreeAddMonoid.ofList_toList
 
 @[to_additive (attr := simp)]
 theorem toList_comp_ofList : @toList α ∘ ofList = id := rfl
 #align free_monoid.to_list_comp_of_list FreeMonoid.toList_comp_ofList
+#align free_add_monoid.to_list_comp_of_list FreeAddMonoid.toList_comp_ofList
 
 @[to_additive (attr := simp)]
 theorem ofList_comp_toList : @ofList α ∘ toList = id := rfl
 #align free_monoid.of_list_comp_to_list FreeMonoid.ofList_comp_toList
+#align free_add_monoid.of_list_comp_to_list FreeAddMonoid.ofList_comp_toList
 
 @[to_additive]
 instance : CancelMonoid (FreeMonoid α)
@@ -87,53 +96,65 @@ instance : Inhabited (FreeMonoid α) := ⟨1⟩
 @[to_additive (attr := simp)]
 theorem toList_one : toList (1 : FreeMonoid α) = [] := rfl
 #align free_monoid.to_list_one FreeMonoid.toList_one
+#align free_add_monoid.to_list_zero FreeAddMonoid.toList_zero
 
 @[to_additive (attr := simp)]
 theorem ofList_nil : ofList ([] : List α) = 1 := rfl
 #align free_monoid.of_list_nil FreeMonoid.ofList_nil
+#align free_add_monoid.of_list_nil FreeAddMonoid.ofList_nil
 
 @[to_additive (attr := simp)]
 theorem toList_mul (xs ys : FreeMonoid α) : toList (xs * ys) = toList xs ++ toList ys := rfl
 #align free_monoid.to_list_mul FreeMonoid.toList_mul
+#align free_add_monoid.to_list_add FreeAddMonoid.toList_add
 
 @[to_additive (attr := simp)]
 theorem ofList_append (xs ys : List α) : ofList (xs ++ ys) = ofList xs * ofList ys := rfl
 #align free_monoid.of_list_append FreeMonoid.ofList_append
+#align free_add_monoid.of_list_append FreeAddMonoid.ofList_append
 
 @[to_additive (attr := simp)]
 theorem toList_prod (xs : List (FreeMonoid α)) : toList xs.prod = (xs.map toList).join := by
   induction xs <;> simp [*, List.join]
 #align free_monoid.to_list_prod FreeMonoid.toList_prod
+#align free_add_monoid.to_list_sum FreeAddMonoid.toList_sum
 
 @[to_additive (attr := simp)]
 theorem ofList_join (xs : List (List α)) : ofList xs.join = (xs.map ofList).prod :=
   toList.injective <| by simp
 #align free_monoid.of_list_join FreeMonoid.ofList_join
+#align free_add_monoid.of_list_join FreeAddMonoid.ofList_join
 
 /-- Embeds an element of `α` into `FreeMonoid α` as a singleton list. -/
 @[to_additive "Embeds an element of `α` into `FreeAddMonoid α` as a singleton list."]
 def of (x : α) : FreeMonoid α := ofList [x]
 #align free_monoid.of FreeMonoid.of
+#align free_add_monoid.of FreeAddMonoid.of
 
 @[to_additive (attr := simp)]
 theorem toList_of (x : α) : toList (of x) = [x] := rfl
 #align free_monoid.to_list_of FreeMonoid.toList_of
+#align free_add_monoid.to_list_of FreeAddMonoid.toList_of
 
 @[to_additive]
 theorem ofList_singleton (x : α) : ofList [x] = of x := rfl
 #align free_monoid.of_list_singleton FreeMonoid.ofList_singleton
+#align free_add_monoid.of_list_singleton FreeAddMonoid.ofList_singleton
 
 @[to_additive (attr := simp)]
 theorem ofList_cons (x : α) (xs : List α) : ofList (x :: xs) = of x * ofList xs := rfl
 #align free_monoid.of_list_cons FreeMonoid.ofList_cons
+#align free_add_monoid.of_list_cons FreeAddMonoid.ofList_cons
 
 @[to_additive]
 theorem toList_of_mul (x : α) (xs : FreeMonoid α) : toList (of x * xs) = x :: toList xs := rfl
 #align free_monoid.to_list_of_mul FreeMonoid.toList_of_mul
+#align free_add_monoid.to_list_of_add FreeAddMonoid.toList_of_add
 
 @[to_additive]
 theorem of_injective : Function.Injective (@of α) := List.singleton_injective
 #align free_monoid.of_injective FreeMonoid.of_injective
+#align free_add_monoid.of_injective FreeAddMonoid.of_injective
 
 /-- Recursor for `FreeMonoid` using `1` and `FreeMonoid.of x * xs` instead of `[]` and `x :: xs`. -/
 @[elab_as_elim, to_additive "Recursor for `FreeAddMonoid` using `0` and `FreeAddMonoid.of x + xs`
@@ -142,17 +163,20 @@ instead of `[]` and `x :: xs`."]
 def recOn {C : FreeMonoid α → Sort _} (xs : FreeMonoid α) (h0 : C 1)
     (ih : ∀ x xs, C xs → C (of x * xs)) : C xs := List.rec h0 ih xs
 #align free_monoid.rec_on FreeMonoid.recOn
+#align free_add_monoid.rec_on FreeAddMonoid.recOn
 
 @[to_additive (attr := simp)]
 theorem recOn_one {C : FreeMonoid α → Sort _} (h0 : C 1) (ih : ∀ x xs, C xs → C (of x * xs)) :
     @recOn α C 1 h0 ih = h0 := rfl
 #align free_monoid.rec_on_one FreeMonoid.recOn_one
+#align free_add_monoid.rec_on_zero FreeAddMonoid.recOn_zero
 
 @[to_additive (attr := simp)]
 theorem recOn_of_mul {C : FreeMonoid α → Sort _} (x : α) (xs : FreeMonoid α) (h0 : C 1)
     (ih : ∀ x xs, C xs → C (of x * xs)) : @recOn α C (of x * xs) h0 ih = ih x xs (recOn xs h0 ih) :=
   rfl
 #align free_monoid.rec_on_of_mul FreeMonoid.recOn_of_mul
+#align free_add_monoid.rec_on_of_add FreeAddMonoid.recOn_of_add
 
 /-- A version of `List.cases_on` for `FreeMonoid` using `1` and `FreeMonoid.of x * xs` instead of
 `[]` and `x :: xs`. -/
@@ -161,22 +185,26 @@ theorem recOn_of_mul {C : FreeMonoid α → Sort _} (x : α) (xs : FreeMonoid α
 def casesOn {C : FreeMonoid α → Sort _} (xs : FreeMonoid α) (h0 : C 1)
     (ih : ∀ x xs, C (of x * xs)) : C xs := List.casesOn xs h0 ih
 #align free_monoid.cases_on FreeMonoid.casesOn
+#align free_add_monoid.cases_on FreeAddMonoid.casesOn
 
 @[to_additive (attr := simp)]
 theorem casesOn_one {C : FreeMonoid α → Sort _} (h0 : C 1) (ih : ∀ x xs, C (of x * xs)) :
     @casesOn α C 1 h0 ih = h0 := rfl
 #align free_monoid.cases_on_one FreeMonoid.casesOn_one
+#align free_add_monoid.cases_on_zero FreeAddMonoid.casesOn_zero
 
 @[to_additive (attr := simp)]
 theorem casesOn_of_mul {C : FreeMonoid α → Sort _} (x : α) (xs : FreeMonoid α) (h0 : C 1)
     (ih : ∀ x xs, C (of x * xs)) : @casesOn α C (of x * xs) h0 ih = ih x xs := rfl
 #align free_monoid.cases_on_of_mul FreeMonoid.casesOn_of_mul
+#align free_add_monoid.cases_on_of_add FreeAddMonoid.casesOn_of_add
 
 @[to_additive (attr := ext)]
 theorem hom_eq ⦃f g : FreeMonoid α →* M⦄ (h : ∀ x, f (of x) = g (of x)) : f = g :=
   MonoidHom.ext fun l ↦ recOn l (f.map_one.trans g.map_one.symm)
     (fun x xs hxs ↦ by  simp only [h, hxs, MonoidHom.map_mul])
 #align free_monoid.hom_eq FreeMonoid.hom_eq
+#align free_add_monoid.hom_eq FreeAddMonoid.hom_eq
 
 /-- A variant of `List.prod` that has `[x].prod = x` true definitionally.
 The purpose is to make `FreeMonoid.lift_eval_of` true by `rfl`. -/
@@ -204,38 +232,46 @@ def lift : (α → M) ≃ (FreeMonoid α →* M)
   left_inv f := rfl
   right_inv f := hom_eq fun x ↦ rfl
 #align free_monoid.lift FreeMonoid.lift
+#align free_add_monoid.lift FreeAddMonoid.lift
 
 @[to_additive (attr := simp)]
 theorem lift_symm_apply (f : FreeMonoid α →* M) : lift.symm f = f ∘ of := rfl
 #align free_monoid.lift_symm_apply FreeMonoid.lift_symm_apply
+#align free_add_monoid.lift_symm_apply FreeAddMonoid.lift_symm_apply
 
 @[to_additive]
 theorem lift_apply (f : α → M) (l : FreeMonoid α) : lift f l = ((toList l).map f).prod :=
 prodAux_eq _
 #align free_monoid.lift_apply FreeMonoid.lift_apply
+#align free_add_monoid.lift_apply FreeAddMonoid.lift_apply
 
 @[to_additive]
 theorem lift_comp_of (f : α → M) : lift f ∘ of = f := rfl
 #align free_monoid.lift_comp_of FreeMonoid.lift_comp_of
+#align free_add_monoid.lift_comp_of FreeAddMonoid.lift_comp_of
 
 @[to_additive (attr := simp)]
 theorem lift_eval_of (f : α → M) (x : α) : lift f (of x) = f x := rfl
 #align free_monoid.lift_eval_of FreeMonoid.lift_eval_of
+#align free_add_monoid.lift_eval_of FreeAddMonoid.lift_eval_of
 
 @[to_additive (attr := simp)]
 theorem lift_restrict (f : FreeMonoid α →* M) : lift (f ∘ of) = f := lift.apply_symm_apply f
 #align free_monoid.lift_restrict FreeMonoid.lift_restrict
+#align free_add_monoid.lift_restrict FreeAddMonoid.lift_restrict
 
 @[to_additive]
 theorem comp_lift (g : M →* N) (f : α → M) : g.comp (lift f) = lift (g ∘ f) :=
 -- Porting note: replace ext by FreeMonoid.hom_eq
   FreeMonoid.hom_eq (by simp)
 #align free_monoid.comp_lift FreeMonoid.comp_lift
+#align free_add_monoid.comp_lift FreeAddMonoid.comp_lift
 
 @[to_additive]
 theorem hom_map_lift (g : M →* N) (f : α → M) (x : FreeMonoid α) : g (lift f x) = lift (g ∘ f) x :=
   FunLike.ext_iff.1 (comp_lift g f) x
 #align free_monoid.hom_map_lift FreeMonoid.hom_map_lift
+#align free_add_monoid.hom_map_lift FreeAddMonoid.hom_map_lift
 
 /-- Define a multiplicative action of `FreeMonoid α` on `β`. -/
 @[to_additive "Define an additive action of `FreeAddMonoid α` on `β`."]
@@ -244,24 +280,28 @@ def mkMulAction (f : α → β → β) : MulAction (FreeMonoid α) β where
   one_smul _ := rfl
   mul_smul _ _ _ := List.foldr_append _ _ _ _
 #align free_monoid.mk_mul_action FreeMonoid.mkMulAction
+#align free_add_monoid.mk_add_action FreeAddMonoid.mkAddAction
 
 @[to_additive]
 theorem smul_def (f : α → β → β) (l : FreeMonoid α) (b : β) :
     haveI := mkMulAction f
     l • b = l.toList.foldr f b := rfl
 #align free_monoid.smul_def FreeMonoid.smul_def
+#align free_add_monoid.vadd_def FreeAddMonoid.vadd_def
 
 @[to_additive]
 theorem ofList_smul (f : α → β → β) (l : List α) (b : β) :
     haveI := mkMulAction f
     ofList l • b = l.foldr f b := rfl
 #align free_monoid.of_list_smul FreeMonoid.ofList_smul
+#align free_add_monoid.of_list_vadd FreeAddMonoid.ofList_vadd
 
 @[to_additive (attr := simp)]
 theorem of_smul (f : α → β → β) (x : α) (y : β) :
     (haveI := mkMulAction f
     of x • y) = f x y := rfl
 #align free_monoid.of_smul FreeMonoid.of_smul
+#align free_add_monoid.of_vadd FreeAddMonoid.of_vadd
 
 /-- The unique monoid homomorphism `FreeMonoid α →* FreeMonoid β` that sends
 each `of x` to `of (f x)`. -/
@@ -273,29 +313,36 @@ def map (f : α → β) : FreeMonoid α →* FreeMonoid β
   map_one' := rfl
   map_mul' _ _ := List.map_append _ _ _
 #align free_monoid.map FreeMonoid.map
+#align free_add_monoid.map FreeAddMonoid.map
 
 @[to_additive (attr := simp)]
 theorem map_of (f : α → β) (x : α) : map f (of x) = of (f x) := rfl
 #align free_monoid.map_of FreeMonoid.map_of
+#align free_add_monoid.map_of FreeAddMonoid.map_of
 
 @[to_additive]
 theorem toList_map (f : α → β) (xs : FreeMonoid α) : toList (map f xs) = xs.toList.map f := rfl
 #align free_monoid.to_list_map FreeMonoid.toList_map
+#align free_add_monoid.to_list_map FreeAddMonoid.toList_map
 
 @[to_additive]
 theorem ofList_map (f : α → β) (xs : List α) : ofList (xs.map f) = map f (ofList xs) := rfl
 #align free_monoid.of_list_map FreeMonoid.ofList_map
+#align free_add_monoid.of_list_map FreeAddMonoid.ofList_map
 
 @[to_additive]
 theorem lift_of_comp_eq_map (f : α → β) : (lift fun x ↦ of (f x)) = map f := hom_eq fun _ ↦ rfl
 #align free_monoid.lift_of_comp_eq_map FreeMonoid.lift_of_comp_eq_map
+#align free_add_monoid.lift_of_comp_eq_map FreeAddMonoid.lift_of_comp_eq_map
 
 @[to_additive]
 theorem map_comp (g : β → γ) (f : α → β) : map (g ∘ f) = (map g).comp (map f) := hom_eq fun _ ↦ rfl
 #align free_monoid.map_comp FreeMonoid.map_comp
+#align free_add_monoid.map_comp FreeAddMonoid.map_comp
 
 @[to_additive (attr := simp)]
 theorem map_id : map (@id α) = MonoidHom.id (FreeMonoid α) := hom_eq fun _ ↦ rfl
 #align free_monoid.map_id FreeMonoid.map_id
+#align free_add_monoid.map_id FreeAddMonoid.map_id
 
 end FreeMonoid
fix: make List.rec and Nat.rec computable (#1720)

This works around https://github.com/leanprover/lean4/issues/2049. By manually adding compiler support for these recursors, we make a large number of porting notes redundant.

Diff
@@ -138,9 +138,9 @@ theorem of_injective : Function.Injective (@of α) := List.singleton_injective
 /-- Recursor for `FreeMonoid` using `1` and `FreeMonoid.of x * xs` instead of `[]` and `x :: xs`. -/
 @[elab_as_elim, to_additive "Recursor for `FreeAddMonoid` using `0` and `FreeAddMonoid.of x + xs`
 instead of `[]` and `x :: xs`."]
--- Porting note: added noncomputable
-noncomputable def recOn {C : FreeMonoid α → Sort _} (xs : FreeMonoid α) (h0 : C 1)
-    (ih : ∀ x xs, C xs → C (of x * xs)) : C xs := List.recOn xs h0 ih
+-- Porting note: change from `List.recOn` to `List.rec` since only the latter is computable
+def recOn {C : FreeMonoid α → Sort _} (xs : FreeMonoid α) (h0 : C 1)
+    (ih : ∀ x xs, C xs → C (of x * xs)) : C xs := List.rec h0 ih xs
 #align free_monoid.rec_on FreeMonoid.recOn
 
 @[to_additive (attr := simp)]
Diff
@@ -178,18 +178,31 @@ theorem hom_eq ⦃f g : FreeMonoid α →* M⦄ (h : ∀ x, f (of x) = g (of x))
     (fun x xs hxs ↦ by  simp only [h, hxs, MonoidHom.map_mul])
 #align free_monoid.hom_eq FreeMonoid.hom_eq
 
+/-- A variant of `List.prod` that has `[x].prod = x` true definitionally.
+The purpose is to make `FreeMonoid.lift_eval_of` true by `rfl`. -/
+@[to_additive "A variant of `List.sum` that has `[x].sum = x` true definitionally.
+The purpose is to make `FreeAddMonoid.lift_eval_of` true by `rfl`."]
+def prodAux {M} [Monoid M] : List M → M
+  | []  => 1
+  | (x :: xs) => List.foldl (· * ·) x xs
+
+@[to_additive]
+lemma prodAux_eq : ∀ l : List M, FreeMonoid.prodAux l = l.prod
+  | []  => rfl
+  | (_ :: xs) => congr_arg (fun x => List.foldl (· * ·) x xs) (one_mul _).symm
+
 /-- Equivalence between maps `α → M` and monoid homomorphisms `FreeMonoid α →* M`. -/
 @[to_additive "Equivalence between maps `α → A` and additive monoid homomorphisms
 `FreeAddMonoid α →+ A`."]
 def lift : (α → M) ≃ (FreeMonoid α →* M)
     where
   toFun f :=
-  { toFun := fun l ↦ ((toList l).map f).prod
-    map_one' := rfl -- sorry
-    map_mul' := fun _ _ ↦ by simp only [toList_mul, List.map_append, List.prod_append] }
+  { toFun := fun l ↦ prodAux ((toList l).map f)
+    map_one' := rfl
+    map_mul' := fun _ _ ↦ by simp only [prodAux_eq, toList_mul, List.map_append, List.prod_append] }
   invFun f x := f (of x)
-  left_inv f := funext fun x ↦ one_mul (f x)
-  right_inv f := hom_eq fun x ↦ one_mul (f (of x))
+  left_inv f := rfl
+  right_inv f := hom_eq fun x ↦ rfl
 #align free_monoid.lift FreeMonoid.lift
 
 @[to_additive (attr := simp)]
@@ -197,15 +210,16 @@ theorem lift_symm_apply (f : FreeMonoid α →* M) : lift.symm f = f ∘ of := r
 #align free_monoid.lift_symm_apply FreeMonoid.lift_symm_apply
 
 @[to_additive]
-theorem lift_apply (f : α → M) (l : FreeMonoid α) : lift f l = ((toList l).map f).prod := rfl
+theorem lift_apply (f : α → M) (l : FreeMonoid α) : lift f l = ((toList l).map f).prod :=
+prodAux_eq _
 #align free_monoid.lift_apply FreeMonoid.lift_apply
 
 @[to_additive]
-theorem lift_comp_of (f : α → M) : lift f ∘ of = f := lift.symm_apply_apply f
+theorem lift_comp_of (f : α → M) : lift f ∘ of = f := rfl
 #align free_monoid.lift_comp_of FreeMonoid.lift_comp_of
 
 @[to_additive (attr := simp)]
-theorem lift_eval_of (f : α → M) (x : α) : lift f (of x) = f x := congr_fun (lift_comp_of f) x
+theorem lift_eval_of (f : α → M) (x : α) : lift f (of x) = f x := rfl
 #align free_monoid.lift_eval_of FreeMonoid.lift_eval_of
 
 @[to_additive (attr := simp)]
feat port:Algebra.FreeMonoid.Basic (#1443)
  • Dot notation not working for toList so replaced with "normal" notation

Dependencies 2 + 87

88 files ported (97.8%)
41773 lines ported (99.7%)
Show graph

The unported dependencies are